Обещание - начало - ожидание: порядок вывода - PullRequest
0 голосов
/ 05 декабря 2018

Всегда ли порядок значений, возвращаемых 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( ', ' );
    }
}

1 Ответ

0 голосов
/ 05 декабря 2018

Да, неаккуратная форма await явно разработана так, что можно делать такие вещи, как:

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

И назначать правильные вещи, независимо от того, что завершается первым.В случае, о котором идет речь, - нажатие Promise s на массив - тогда порядок результата будет соответствовать порядку этих Promise s, даже если последний завершается раньше по времени.

...