branch 式 は 1 つ以上の async 部分式の ブロック を開始し、後続の式はすべて branch 式の完了を待つことなくすぐに実行されます。
branch は、基本的に ファイアアンドフォーゲット の immediate であるかのように async コード ブロックを処理するために使用できますが、引き続き async コンテキスト 内で 呼び出す 必要があります。
branch:
# このブロックは完了するまで続きます
AsyncFunction1() # 実質的に AsyncFunction3() と同時に開始されます
Method1() # ブロックと immediate 式を組み合わせることができます
AsyncFunction2()
AsyncFunction3() # 実質的に AsyncFunction1() と同時に開始されます
# AsyncFunction3 が完了したときに branch ブロックのタスクが引き続き実行されている場合、
# 残りの branch のタスクはキャンセルされます
次のコードは、branch 式の 構文 を示しています。
expression0
branch:
slow-expression
mid-expression
fast-expression
expression1
以下の図は、この式の 実行 フローを示しています。
非構造化並列処理 spawn 式 に似てはいますが、branch では任意のコード ブロックを使用できます。また、外側の async コンテキスト内でのみ許容され、そのコンテキストによって結合されます。そのため、branch は可能な限り spawn より優先されます。
branch 式の使用法
branch 式を使用できる場所 |
async コンテキスト |
branch 式の呼び出し時間 |
即時 |
branch コード ブロックの要件 |
branch 式には、少なくとも 1 つの async 式が必要です。 |
branch 式の機能 |
branch 式の本体は、検出されるとすぐに開始されます。branch 式の本体は、コード ブロックが完了するまで、または branch コード ブロックのタスクがキャンセルされて外側の async コンテキストが完了するまでのいずれか早い方が起きるまで評価が続けられます。 |
branch 式が完了するタイミング |
branch 式はすぐに完了します。 |
branch の開始後に次の式が開始されるタイミング |
branch 式に続く式はすべて、すぐに開始されます。 |
branch 式の結果 |
branch 式には結果がないため、結果の型は void になります。 |
branch 式は現在、loop や for などのイテレーション式の本体では使用できません。使用する必要がある場合は async 関数にラップし、イテレーション式にその関数を呼び出させます。