NAME

Parallel::Async::Chain - task chain manager.

METHODS

my @results = $chain->recv(@args)

Execute tasks on child processes and wait for receive return values.

# create new task
my $task_add = async {
    my ($x, $y) = @_;
    return $x + $y;
};
my $task_sub = async {
    my ($x, $y) = @_;
    return $x - $y;
};
my $task_times = async {
    my ($x, $y) = @_;
    return $x * $y;
};

my $chain = $task_add->join($task_sub)->join($task_times);
my ($res_add, $res_sub, $res_times) = $chain->recv(10, 20);
say $res_add->[0];   ##  30
say $res_sub->[0];   ## -10
say $res_times->[0]; ## 200
my @pids = $chain->run(@args)

Execute tasks on child processes.

# create new task
my $task_add = async {
    my ($x, $y) = @_;
    return $x + $y;
};
my $task_sub = async {
    my ($x, $y) = @_;
    return $x - $y;
};
my $task_times = async {
    my ($x, $y) = @_;
    return $x * $y;
};

my $chain = $task_add->join($task_sub)->join($task_times);
my @pids = $chain->run(10, 20);
my @pids = $chain->daemonize(@args)

Execute tasks on daemonized processes.

# create new task
my $task_add = async {
    my ($x, $y) = @_;
    return $x + $y;
};
my $task_sub = async {
    my ($x, $y) = @_;
    return $x - $y;
};
my $task_times = async {
    my ($x, $y) = @_;
    return $x * $y;
};

my $chain = $task_add->join($task_sub)->join($task_times);
my @pids = $chain->daemonize(10, 20);
$chain->join($task1, ...);

Join multiple tasks, like Parallel::Async::Task#join.

$task->reset;

Reset the execution status of all tasks, like Parallel::Async::Task#reset.

$task->clone;

Clone and reset the execution status of all tasks, like Parallel::Async::Task#clone.

AUTHOR

karupanerura <karupa@cpan.org>