【问题标题】:Promise - start - await: output order承诺 - 开始 - 等待:输出顺序
【发布时间】:2019-05-06 17:29:30
【问题描述】:

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( ', ' );
    }
}

【问题讨论】:

  • 我猜答案是否定的,但您想确切知道什么?或者你想做什么?
  • 如果我想填写 AoA 并且它不能保持订单,我必须写 @AoA[$_[0]][$_[1]] = $_[2] 以保持订单,否则我有更多选择。
  • 但是你为什么要这样做?如果你想在保持顺序的同时加快分配速度,可以使用hyper
  • 我会试试的。 -

标签: promise output raku


【解决方案1】:

是的,await 的 slurpy 形式是明确设计的,因此可以执行以下操作:

my ($spec, $config) = await start { load-yaml slurp $spec-file },
                            start { from-json slurp $config-file };

并分配正确的事情,而不考虑先完成的事情。在问题的情况下 - 将 Promises 推入数组 - 然后结果顺序将匹配那些 Promises 的顺序,即使后者及时完成。

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 2013-09-16
    • 2019-04-29
    • 2020-10-31
    • 2019-12-10
    • 1970-01-01
    • 2021-08-29
    • 2020-07-19
    • 2013-11-05
    相关资源
    最近更新 更多