そのため、イベント駆動型プログラミングへの進出に苦労しています。そのほとんどはまだ逐次的に考えているためですが、LWP::Protocol::AnyEvent::httpを使用しているときにコードを同期する方法を理解するのに苦労しており、理解の助けを求めています。以下は、私の基本的な理解不足を示す、私が作成できる最小のプログラムです。
use strict;
use warnings;
use 5.10.0;
use LWP::Protocol::AnyEvent::http;
use WWW::Mechanize;
use Coro qw(async);
my $url = "http://feedproxy.google.com/~r/PerlNews/~3/kqUb_rpU5dE/";
my $mech = WWW::Mechanize->new;
$mech->get($url);
my @cs;
foreach my $link ($mech->links) {
my $c = async {
say "Getting " . $link->url;
my $ua = WWW::Mechanize->new;
$ua->get($link->url);
};
push(@cs, $c);
}
$_->join for (@cs);
foreach
ループに入る前に ->get が成功したことを確認するにはどうすればよいですか? モジュールの->get
使用時にブロックされないため、すぐに戻ります。LWP::Protocol::AnyEvent::http
そのため->links
、プログラムは終了するだけです。削除LWP::Protocol::AnyEvent::http
すると、プログラムは通常の順次プログラムのようにリンクを返し、速度も同様に遅くなります。
洞察をありがとう。