Skip to content

Instantly share code, notes, and snippets.

@ugexe
Last active August 29, 2015 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ugexe/a3c1efc1c3c6d4f42fdc to your computer and use it in GitHub Desktop.
Save ugexe/a3c1efc1c3c6d4f42fdc to your computer and use it in GitHub Desktop.
RT125758
# Linux
> perl6 rt125758.pl6
# STARTED
2
1
3
# FINISHED
# OSX
> perl6 rt125758.pl6
# STARTED
2
# FINISHED
class Processor {
has @.processes; # [[cmd1, cmd2], [cmd3]]
has $.process-a1;
has $.process-a2;
has $.process-b1;
submethod BUILD {
my $id = 0;
$!process-a1 := Proc::Async.new('echo', ++$id);
$!process-a2 := Proc::Async.new('echo', ++$id);
$!process-b1 := Proc::Async.new('echo', ++$id);
@!processes.push([$!process-a1, $!process-a2]);
@!processes.push([$!process-b1]);
}
method start-processes {
my $p = Promise.new;
$p.keep(1);
for @!processes -> $group {
$p = $p.then: {
my @promises := $group>>.start;
await Promise.allof(@promises) if @promises;
sleep 5;
}
}
$p;
}
}
my $processor = Processor.new;
say "# STARTED";
await $processor.start-processes;
say "# FINISHED";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment