因此,我在涉足事件驱动编程方面遇到了困难。其中大部分是由于仍然按顺序思考,但我很难理解任何人在使用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
显然会使程序返回链接,就像一个常规的顺序程序一样,也像一个一样慢。
感谢您的任何见解。