Простой и не очень правильный способ:

delete $cv->{_ae_sent};
https://metacpan.org/source/MLEHMANN/AnyEvent-7.05/lib/AnyEvent.pm#L1961

Но позвольте поинтересоваться, в какой задаче у вас возникает необходимость 
вызывать recv?

В нормальном приложении на anyevent recv может встречаться только 1 раз, и то, 
если вместо него не написан EV::loop (что более производительно).

AE::cv { ... } + begin/end - это да, в большом количестве. Но не recv/send

> my ($t1, $t2);
> $t1 = AE::timer 1, 0, sub {
>  warn "1st timer fired";
>  undef $t1;
>  $t2= AE::timer (1, 0, sub {
>    undef $t2;
>    warn "2nd timer fired";
>    $cv->send;
>  });
> };

лучше так:

my $t; $t = AE::timer 1, 0, sub {
        warn "1st";
        $t = AE::timer 1, 0, sub { # unref old and keep new
                undef $t;
                warn "2nd";
                $cv->send;
        }
}


On 20.11.2013, at 20:13, Anton Yuzhaninov <[email protected]> wrote:

> Хочется иметь condvar, которую можно использовать повторно, но похоже 
> $cv->recv можно сделать только один раз.
> 
> В таком коде:
> 
> use AnyEvent;
> 
> my $cv = AE::cv;
> 
> $cv->begin;
> 
> my $t1 = AE::timer 4, 0, sub { $cv->end };
> 
> warn "wait for 1st timer";
> 
> $cv->recv;
> 
> warn "1st timer fired";
> 
> $cv->begin;
> 
> my $t2 = AE::timer 3, 0, sub { $cv->end };
> 
> $cv->recv;
> 
> Второй $cv->recv возвращается сразу без ожидания $cv->end в callback от 
> второго таймера.
> 
> Это баг или фича?
> -- 
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org

-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить