ホームページ > バックエンド開発 > C++ > Await Task と Task.Result: 違いは何ですか?

Await Task と Task.Result: 違いは何ですか?

Barbara Streisand
リリース: 2025-01-08 08:56:42
オリジナル
233 人が閲覧しました

Await Task vs. Task.Result: What's the Difference?

非同期プログラミングにおける

await Task<T>Task<T>.Result の比較

await Task<T>Task<T>.Result の核となる違いを理解することは、効果的な非同期プログラミングにとって最も重要です。これを実際の例で説明してみましょう。

次の方法を検討してください:

<code class="language-csharp">public async Task<string> GetName(int id)
{
    Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
    return nameTask.Result;
}</code>
ログイン後にコピー

ここで、Task<T>.Result はタスクの結果を取得するために使用されます。 ただし、このアプローチでは、呼び出しスレッドがタスクの完了を同期的に待機する必要があるため、同時実行性に重大な影響を与える可能性があります。

非同期プログラミングは、await 演算子を使用してこれをエレガントに解決し、ノンブロッキングの一時停止を可能にします。 改良された非同期バージョンは次のとおりです:

<code class="language-csharp">public async Task<string> GetName(int id)
{
    Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
    return await nameTask;
}</code>
ログイン後にコピー

await を使用すると、呼び出しスレッドが解放され、他のタスクを続行できるようになります。 待機中のタスクが完了すると、スレッドが再開され、結果がシームレスに返されます。

本質的に: await Task<T> はスレッドを放棄することで真の非同期操作を容易にし、Task<T>.Result はタスクが終了するまでスレッドをブロックします。 重要な違いは例外の処理方法です。Result は例外を AggregateException 内でラップしますが、await は元の例外を直接再スローします。

以上がAwait Task と Task.Result: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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