await キーワード後のコード実行について
シングルスレッド アプリケーションでは、await キーワードが混乱を招く可能性があります。コードが非同期メソッド内で await キーワードに遭遇すると、呼び出し元のメソッドに戻り、制御を UI スレッドに放棄します。ただし、await 後のコードがどのように実行されるかを理解するのは難しい場合があります。
メインスレッドがロックされたままであるという想定に反して、await 後のコードは別のスレッドによって実行される可能性があります。この動作は同期コンテキストによって決まります。デフォルトでは、Task の awaitable パターンは、await 式の時点で現在の同期コンテキストを使用します。
たとえば、コードが UI スレッド内で実行される場合、継続 (await に続く部分) は同じ UI スレッドで実行を再開します。ただし、スレッド プール スレッドの場合、継続は必ずしも同じスレッドで再開されるとは限りません。
提供されたコードの Wait() 呼び出しのように、UI スレッドをブロックしていることを認識することが重要です。サンプルを使用すると、継続の実行が妨げられる可能性があります。タスクに現在のスレッドでの作業が含まれ、その完了ステータスが不明なシナリオでは、Wait() または Result に頼ることはお勧めできません。
デフォルトの同期コンテキストに依存しないようにするには、Task.ConfigureAwait メソッドを使用します。使用できます。これにより、継続を任意のスレッドで実行できるように指定できるため、スレッドの優先順位がないライブラリ メソッドに適しています。 ConfigureAwait(false) 構文を利用することで、現在のコンテキストから継続を切り離すことを示し、より堅牢なマルチスレッド コードを容易にします。
以上がC# で `await` キーワードの後にコードの実行はどのように再開されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。