Первое, что нужно проверить, когда все произошло. Я не мог получить такую же задержку. Не забудьте попробовать каждый раз несколько раз, чтобы определить выбросы, где есть сбой сети. Обратите внимание, что вторым аргументом неблокирующей подпрограммы является объект транзакции, обычно записываемый как $tx
, где объект ответа обычно записывается res
:
use Mojo::Util qw(steady_time);
say "Begin: " . steady_time();
END { say "End: " . steady_time() }
my $ua = Mojo::UserAgent->new ();
my @ids = qw(id1 id2 id3);
foreach (@ids) {
my $input = $_;
my $res = $ua->get(
$url =>
sub {
my ($ua, $tx) = @_;
print "Fetched\n";
}
);
}
Одна из возможностей заключается в том, что keep-alive удерживает открытое соединение. Что произойдет, если вы выключите это?
my $res = $ua->get(
$url =>
{ Connection => 'close' }
sub {
my ($ua, $tx) = @_;
print "Fetched\n";
}
);
Вот версия, которая использует обещания , к которой вы захотите привыкнуть, когда к ней придет больше вещей из Mojo:
use feature qw(signatures);
no warnings qw(experimental::signatures);
use Mojo::Promise;
use Mojo::Util qw(steady_time);
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
say "Begin: " . steady_time();
END { say "End: " . steady_time() }
my @ids = qw(id1 id2 id3);
my @gets = map {
$ua->get_p( 'http://www.perl.com' )->then(
sub ( $tx ) { say "Fetched: " . steady_time() },
sub { print "Error: @_" }
);
} @ids;
Mojo::Promise->all( @gets )->wait;