この 2 つの関係は次のようになります。async
-これawait
はプログラミング言語が使用する手法であり、同期しているように見える (たとえば、明示的な継続デリゲートがない) コードを記述できますが、実際には非同期で実行されます。これは、関数の実行の現在の状態を表すオブジェクトを作成し、それを待機中の操作の継続として登録することによって実現されます。
つまり、async
-await
は継続を使用します。
async
/パターンはawait
本格的な継続の限られたサブセットですか? (もし本当なら、継続はどのようにより表現力豊かになりますか?)
あなたはそれを言うことができます。継続はより一般的な概念であり、async
非同期await
を実現するためにのみ使用します。
たとえば、継続渡しスタイルのプログラミングでは、操作ごとに 2 つの継続 (1 つは成功の場合、もう 1 つは失敗の場合) を持つことで、例外処理を実装できます。async
この継続の使用は-とは何の関係もありませんawait
(おそらくラムダとして、各継続を明示的に記述する必要があります)。
継続はasync
/の実装手法の 1 つにすぎawait
ませんか? (もしそうなら、他にどのような実装アプローチが存在しますか?)
async
継続の概念は-の中心にあると言えawait
ます。
コアとなるアイデアは、関数の実行を一時async
的await
に停止し、後で再開することです。そのためには、その再開に使用できる何らかのオブジェクトが必要です。継続とはまさにこのことです。