Acme-Parataxis
view release on metacpan or search on metacpan
lib/Acme/Parataxis.pm view on Meta::CPAN
return ( ref $rv eq 'ARRAY' ) ? ( wantarray ? @$rv : $rv->[-1] ) : $rv;
}
method fid () {-1}
}
class #
Acme::Parataxis::Future {
use Carp qw[croak];
field $is_ready : reader = 0;
field $result;
field $error;
field @callbacks;
method result () {
croak 'Future not ready' unless $is_ready;
return $result;
}
method set_result ($val) {
die 'Future already ready' if $is_ready;
$result = $val;
$is_ready = 1;
$_->($self) for @callbacks;
}
method set_error ($err) {
die 'Future already ready' if $is_ready;
$error = $err;
$is_ready = 1;
$_->($self) for @callbacks;
}
method clear_result () {
$result = undef;
$error = undef;
}
method on_ready ($cb) {
if ($is_ready) { $cb->($self) }
else { push @callbacks, $cb }
}
method await () {
return $self->result if $is_ready;
my $fid = Acme::Parataxis->current_fid;
$self->on_ready(
sub ($f) {
Acme::Parataxis::_scheduler_enqueue_by_id($fid);
}
);
( run in 0.829 second using v1.01-cache-2.11-cpan-ceb78f64989 )