Рискну предложить Coro для sequential кода. Передача управления для блокирующего кода на автомате. Но можно и самому - cede.
21 ноября 2013 г., 6:01 пользователь Mons Anderson <[email protected]> написал: > Простой и не очень правильный способ: > > 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 > >
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
