rush 式 は、2 つ以上の async 式の ブロック を並列で (同時に) 実行するために使用されます。
最速の部分式が完了すると rush に続く式が評価され、残りの部分式の 評価 が続けられます。
set WinnerResult = rush:
# 3 つの async 関数はすべて同時に開始されます
AsyncFunctionLongTime()
AsyncFunctionShortTime() # これが勝者になり、その結果が使用されます
AsyncFunctionMediumTime()
# 最速の async 関数 (AsyncFunctionShortTime()) が完了すると次の式が呼び出されます。
# その他すべての部分式のタスク (AsyncFunctionLongTime()、AsyncFunctionMediumTime()) が続きます。
NextExpression(WinnerResult)
AsyncFunction4()
# AsyncFunction4 が完了したときに rush 部分式のタスクが引き続き実行されている場合、
# それらのタスクはこの時点でキャンセルされます。
次のコードは、rush 式の 構文 を示しています。
expression0
rush:
slow-expression
mid-expression
fast-expression
expression1
以下の図は、この式の 実行 フローを示しています。

rush 式の使用法
rush 式を使用できる場所 |
async コンテキスト |
rush 式の呼び出し時間 |
非同期 |
rush コード ブロックの要件 |
rush 式の本体には少なくとも 2 つの式が必要であり、どの式も async でなければなりません。 |
rush 式の機能 |
race に似てはいますが、最初の式の完了後に完了した式の評価が続けられます。複数の式が実質的に同じシミュレーションの更新で完了した場合は、完了して先に検出された式によって均衡が破られます。完了していない式は、それらが完了するまで、または残りの敗者の式がキャンセルされて外側の async コンテキストが完了するまでのいずれか早い方が起きるまで評価が続けられます。 |
rush 式が完了するタイミング |
rush 式は、コード ブロックの最初の式が完了したタイミングで完了します。最速、最短、最初に完了した、または完了までの時間が最も少ないというのがこれに該当します。 |
rush の開始後に次の式が開始されるタイミング |
rush 式に続く次の式はすべて、完了した式が終了したタイミングで開始されます。 |
rush 式の結果 |
rush 式の結果は、最初に完了した式の結果です。結果型は、コード ブロックのすべての式の最も一般的な互換型です。 |
rush 式は現在、loop や for のようなイテレーション式の本体では使用できません。使用する必要がある場合は async 関数にラップし、イテレーション式にその関数を呼び出させます。