AnyEvent-Blackboard
view release on metacpan or search on metacpan
lib/AnyEvent/Blackboard.pm view on Meta::CPAN
package AnyEvent::Blackboard;
=head1 NAME
AnyEvent::Blackboard - An extension of Async::Blackboard which uses AnyEvent
for timeouts.
=head1 SYNOPSIS
my $blackboard = AnyEvent::Blackboard->new();
$blackboard->watch([qw( foo bar )], [ $object, "found_foobar" ]);
$blackboard->watch(foo => [ $object, "found_foo" ]);
# After 250ms, provide ``undef'' for ``foo''
$blackboard->timeout(foo => 0.25);
=head1 RATIONALE
Async::Blackboard makes a fantastic synchronization component -- however, it
does have the possible condition of allowing control to be abandoned due to a
lack value. This subclass adds the functionality of timeouts on keys to ensure
this doesn't happen.
=cut
use strict;
use warnings FATAL => "all";
use AnyEvent;
use parent qw( Async::Blackboard );
use Carp qw( croak confess );
our $VERSION = "0.4.10";
=head1 ATTRIBUTES
=over 4
=cut
=item default_timeout -> Num
Default timeout in (optionally fractional) seconds.
=cut
=item condvar -> AnyEvent::CondVar
A conditional variable to track dispatches. (optional)
When supplied, each dispatch group will be wrapped in calls to ``begin'' and
``end'' on condvar instance.
=cut
sub new {
my ($class, @arguments) = @_;
if (@arguments % 2) {
croak "AnyEvent::Blackboard->new() requires a balanced list";
}
my %options = @arguments;
my $self = $class->SUPER::new();
@$self{qw( -default_timeout -condvar )} =
@options{qw( default_timeout condvar )};
$self->{-condvar} //= AnyEvent->condvar;
return $self;
}
=back
=cut
=back
( run in 3.503 seconds using v1.01-cache-2.11-cpan-9581c071862 )