ホームページ > バックエンド開発 > C++ > await task.run():「await ass.run()の違いは何ですか。 return; `および` return task.run() `?

await task.run():「await ass.run()の違いは何ですか。 return; `および` return task.run() `?

DDD
リリース: 2025-01-30 03:46:10
オリジナル
298 人が閲覧しました

Await Task.Run(): What's the Difference Between `await Task.Run(); return;` and `return Task.Run()`?

非同期操作:

await Task.Run(); return;return Task.Run()の微妙な違い

一見すると、これらの2つのコードは非常に似ているようです:

1

2

3

4

5

async Task TestAsync()

{

    await Task.Run(() => DoSomeWork());

    return;

}

ログイン後にコピー

1

2

3

4

Task TestAsync()

{

    return Task.Run(() => DoSomeWork());

}

ログイン後にコピー
両方とも非同期タスクを呼び出しますが、行動には微妙で重要な違いがあります。

Task.Run()異常なコミュニケーション

主な違いは異常な治療です。最初の例では、非同期法が後で非同期方法を待っているときに

の使用がキャプチャされ、捨てられます。これにより、発信者は異常をエレガントに処理できます。

それどころか、awaitDoSomeWork()の2番目の例では、例外がすぐに広がり、コールメソッドの実行が中断される場合があります。これは、予期しない行動につながり、異常な治療を困難にする可能性があります。

上記の同期await

別の違いは、同期コンテキストに関連しています。 の例では、の操作は、呼び出しスレッドの同期コンテキストで実行されます。代わりに、の例では、異なるスレッドプールのコンテキストで動作します。

死んだロック

await DoSomeWork()非デフォルト同期コンテキストを使用してGUIアプリケーションで非同期操作を実行する場合、return Task.Run()メソッドが発生する可能性が高くなります。たとえば、非同期操作を開始し、UIスレッドから

を使用すると、デッドロックが発生する可能性があります。

概要

これら2つのコードフラグメントの結果は異なります。これは、主に異常の使用とawaitの使用とは異なるためです。非同期操作の場合、を使用すると、異常な普及をより適切に制御し、正しい同期コンテキストで正しく実装されるようにします。 await

以上がawait task.run():「await ass.run()の違いは何ですか。 return; `および` return task.run() `?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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