NAME
Parallel::Async::Task - task class for Parallel::Async.
METHODS
- $task = Parallel::Async::Task->new(\%args)
-
Creates a new Parallel::Async::Task instance.
use Parallel::Async::Task; # create new task my $task = Parallel::Async::Task->new(code => sub { my $result = ...; ## do some task return $result; });
this code is same as
use Parallel::Async; # create new task my $task = async { my $result = ...; ## do some task return $result; };
Arguments can be:
code
CodeRef to run on child process. This CodeRef can get arguments from
recv
oras_anyevent_child
orrun
method arguments.
- my @result = $task->recv(@args)
-
Execute task on child process and wait for receive return value.
# create new task my $task = async { my ($x, $y) = @_; return $x + $y; }; my $res = $task->recv(10, 20); say $res; # 30
- my $watcher = $task->as_anyevent_child(@args)
-
Execute task on child process and receive return value with AnyEvent->child. This feature required AnyEvent.
# create new task my $task = async { my ($x, $y) = @_; return $x + $y; }; my $watcher; $watcher = $task->as_anyevent_child(sub { my ($pid, $status, $res) = @_; say $res; ## 30 undef $watcher; }, 10, 20);
- my $pid = $task->run(@args)
-
Execute task on child process.
# create new task my $task = async { my ($url) = @_; post($url); }; my $pid = $task->run($url); wait;
- my $pid = $task->daemonize(@args)
-
Execute task on daemonized process.
# create new task my $task = async { my ($url) = @_; post($url); }; my $pid = $task->daemonize($url);
- my $chain = $task->join($task1, ...);
-
Join multiple tasks. Can be execute tasks in parallel by chained task. See also Parallel::Async::Chain for more usage.
- $task->reset;
-
Reset the execution status of the task. This feature is useful when you want to re-execute the same task.
# create new task my $task = async { my ($x, $y) = @_; return $x + $y; }; my $res = $task->recv(10, 20); say $res; # 30 $res = $task->reset->recv(10, 30); say $res; # 40
- $task->clone;
-
Clone and reset the execution status of the task. This feature is useful when you want to execute same tasks in parallel.
# create new task my $task = async { my ($x, $y) = @_; return $x + $y; }; my @res = $task->join(map { $task->clone } 1..9)->recv(10, 30);
AUTHOR
karupanerura <karupa@cpan.org>