ホームページ > バックエンド開発 > C++ > C# で `await` キーワードの後に​​コードの実行はどのように再開されますか?

C# で `await` キーワードの後に​​コードの実行はどのように再開されますか?

Susan Sarandon
リリース: 2024-12-31 08:30:11
オリジナル
901 人が閲覧しました

How Does Code Execution Resume After an `await` Keyword in C#?

await キーワード後のコード実行について

シングルスレッド アプリケーションでは、await キーワードが混乱を招く可能性があります。コードが非同期メソッド内で await キーワードに遭遇すると、呼び出し元のメソッドに戻り、制御を UI スレッドに放棄します。ただし、await 後のコードがどのように実行されるかを理解するのは難しい場合があります。

メインスレッドがロックされたままであるという想定に反して、await 後のコードは別のスレッドによって実行される可能性があります。この動作は同期コンテキストによって決まります。デフォルトでは、Task の awaitable パターンは、await 式の時点で現在の同期コンテキストを使用します。

たとえば、コードが UI スレッド内で実行される場合、継続 (await に続く部分) は同じ UI スレッドで実行を再開します。ただし、スレッド プール スレッドの場合、継続は必ずしも同じスレッドで再開されるとは限りません。

提供されたコードの Wait() 呼び出しのように、UI スレッドをブロックしていることを認識することが重要です。サンプルを使用すると、継続の実行が妨げられる可能性があります。タスクに現在のスレッドでの作業が含まれ、その完了ステータスが不明なシナリオでは、Wait() または Result に頼ることはお勧めできません。

デフォルトの同期コンテキストに依存しないようにするには、Task.ConfigureAwait メソッドを使用します。使用できます。これにより、継続を任意のスレッドで実行できるように指定できるため、スレッドの優先順位がないライブラリ メソッドに適しています。 ConfigureAwait(false) 構文を利用することで、現在のコンテキストから継続を切り離すことを示し、より堅牢なマルチスレッド コードを容易にします。

以上がC# で `await` キーワードの後に​​コードの実行はどのように再開されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート