ホームページ > バックエンド開発 > C++ > `await task.run()の重要な違いは何ですか。 return; `および` return task.run() `in c#asyncプログラミングで、これは例外処理にどのように影響しますか?

`await task.run()の重要な違いは何ですか。 return; `および` return task.run() `in c#asyncプログラミングで、これは例外処理にどのように影響しますか?

Susan Sarandon
リリース: 2025-01-30 03:56:11
オリジナル
617 人が閲覧しました

非同期プログラミングにおけるawait Task.Run(); return;return Task.Run()の間の重要な違いと異常な治療への影響

What's the key difference between `await Task.Run(); return;` and `return Task.Run()` in C# async programming, and how does this impact exception handling?

概念の違い

2つのコードフラグメントの主な違いは、異常な通信です。 「」バージョンはタスクを待っていないため、スローされた異常はキャプチャされませんが、すぐにコールに投げます。

コード生成await Task.Run(); return;return Task.Run();

これら2つのコードフラグメントによって生成されたコードは異なります。 「」バージョンは状態マシンを生成しません。

異常な治療

次の例を考えてみましょう await Task.Run(); return; return Task.Run();

を呼び出すと、タスクを待っているときに「

」バージョンは例外をスローします。ただし、に電話すると、例外はすぐにスローされます。 (関数が異常に適切に処理されているとします)。 非同期voidメソッド

非同期void法の場合、異常な通信の論理は異なります。それが存在する場合、非同期ボイド法に投げられた異常は、現在のスレッドのコンテキストで捨てられます。それ以外の場合、それらはにスローされ、発信者は同じスタックフレームでそれらを処理できません。
<code class="language-csharp">static async Task OneTestAsync(int n)
{
    await Task.Delay(n);
}

static Task AnotherTestAsync(int n)
{
    return Task.Delay(n);
}</code>
ログイン後にコピー

シミュレーション非同期異常播種DoTestAsync(OneTestAsync, -2) await DoTestAsync(AnotherTestAsync, -2)テクニックを使用して、非同期方法の異常なコミュニケーション挙動をシミュレートできます。 DoTestAsync この例では、異常はタスク内にスローされ、

の状況と同様に

オブジェクトに広がります。 死んだロックの可能性

ThreadPool.QueueUserWorkItem非同期/待機バージョンは、非デフォルト同期コンテキストで発生しやすくなります。たとえば、次のコードはWinformsまたはWPFアプリケーションで発生します。

これは、UIスレッドでの非同期操作が完了するのを待っているであり、非同期操作自体もUIスレッドで実行する必要があるためです。

要するに、

は構造化された異常な治療を提供し、await Task.Run(); return;はコールパーティに異常を直接投げます、そして、コールパーティはそれ自体で処理する必要があります。選択する方法は、異常な処理戦略とプログラムのコンテキストに依存します。 return Task.Run();バージョンはより安全ですが、潜在的なデッドロックの問題を考慮する必要がありますが、異常な処理にはより注意が必要です。 await

以上が`await task.run()の重要な違いは何ですか。 return; `および` return task.run() `in c#asyncプログラミングで、これは例外処理にどのように影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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