sid*_*com 7 perl6 promise output
返回的值的顺序是否await始终相对于输入顺序?
my @aoa = (
qw<1 a>, qw<2 b>, qw<3 c>,
qw<4 d>, qw<5 e>, qw<6 f>,
qw<7 g>, qw<8 h>, qw<9 i>,
);
my @portions = ( ( 0, 2 ), ( 3, 5 ), ( 6, 8 ) );
my @promise;
for @portions -> $range {
@promise.push: start {
do for $range[0] .. $range[1] -> $row {
do for ^@aoa.[$row] -> $col {
my $str = @aoa[$row][$col] // '';
$row, $col, $str;
}
}
};
}
for await @promise -> @portion {
for @portion -> @p_rows {
say @p_rows.join( ', ' );
}
}
Run Code Online (Sandbox Code Playgroud)
是的,这种笨拙的形式await是明确设计的,以便人们可以做以下事情:
my ($spec, $config) = await start { load-yaml slurp $spec-file },
start { from-json slurp $config-file };
Run Code Online (Sandbox Code Playgroud)
并且分配正确的东西,而不考虑首先完成的事情.在问题的情况下 - 将Promises推入数组 - 然后结果顺序将匹配那些Promises 的顺序,即使后者更快地完成.