Async-Defer
view release on metacpan or search on metacpan
});
$p->do($d);
@result = ();
$p->run(undef, 3);
is_deeply \@result, [4,14], 'accept both CODE and Defer objects';
$d = Async::Defer->new();
$d->do(sub{
my ($d, $n) = @_;
$n++;
$d->{t} = AE::timer 0.01, 0, sub{ $d->done($n) };
});
$d->do(sub{
my ($d, $n) = @_;
$n+=10;
$result = $n;
$d->done($n);
});
$t = AE::timer 0.01, 0, sub{ $d->run(undef, 3) };
$tx= AE::timer 0.5, 0, sub{ $cv->send };
$result = undef;
$cv = AE::cv; $cv->recv;
is $result, 14, 'handle correctly both sync and async functions';
$p = Async::Defer->new();
$d = Async::Defer->new();
$d->do(sub{
my ($d, $n) = @_;
$n //= 0;
push @result, $n;
t/2-do_batch.t view on Meta::CPAN
# - some tasks are CODE, some Defer objects
# * they all doesn't share state (except ref-vars in same Defer clones)
my %seen;
$d = Async::Defer->new();
$d->do(sub{
my ($d, @param) = @_;
$param[0]++;
$d->{t} = AE::timer 0.01, 0, sub { $d->done(@param) };
});
$d->do(sub{
my ($d, @param) = @_;
$seen{$d} = 1;
push @result, {
type => 'Defer',
param=> \@param,
state=> $d->{state}++,
share=> ${$d->{share}}++,
};
t/2-do_batch.t view on Meta::CPAN
share=> ${$d->{share}}++,
};
$d->done(@param);
} ]);
$p->do(sub{
my ($p, @results) = @_;
push @result, @results;
$p->done();
});
(%seen, @result) = ();
$t = AE::timer 0.01, 0, sub{ $p->run(undef, [10], [20], [30], [40], [50]) };
$tx= AE::timer 0.5, 0, sub{ $cv->send };
$cv = AE::cv; $cv->recv;
is scalar(keys %seen), 5, 'all batch objects are different (ARRAY)';
is_deeply \@result, [
{ type=>'sub', state=>0, share=>0, param=>[10] },
{ type=>'sub', state=>0, share=>0, param=>[20] },
{ type=>'anon', state=>0, share=>0, param=>[50] },
{ type=>'Defer', state=>5, share=>1, param=>[31] },
{ type=>'Defer', state=>5, share=>2, param=>[41] },
[10], [20], [31], [41], [50],
], 'they all does not share state (ARRAY)';
t/2-do_batch.t view on Meta::CPAN
share=> ${$d->{share}}++,
};
$d->done(@param);
} });
$p->do(sub{
my ($p, @results) = @_;
%result = @results;
$p->done();
});
(%seen, @result, %result) = ();
$t = AE::timer 0.01, 0, sub{ $p->run(undef, sub1=>[10], sub2=>[20], defer1=>[30], defer2=>[40], anon=>[50]) };
$tx= AE::timer 0.5, 0, sub{ $cv->send };
$cv = AE::cv; $cv->recv;
is scalar(keys %seen), 5, 'all batch objects are different (HASH)';
@result = sort { $a->{param}[0] <=> $b->{param}[0] } @result;
is_deeply \@result, [
{ type=>'sub', state=>0, share=>0, param=>[10] },
{ type=>'sub', state=>0, share=>0, param=>[20] },
{ type=>'Defer', state=>5, share=>3, param=>[31] },
{ type=>'Defer', state=>5, share=>4, param=>[41] },
{ type=>'anon', state=>0, share=>0, param=>[50] },
], 'they all does not share state (HASH)';
( run in 0.474 second using v1.01-cache-2.11-cpan-49f99fa48dc )