ホームページ >バックエンド開発 >C++ >'待ちtask.run()の重要な違いは何ですか。 return; `および`非同期プログラミングでtask.run() `を返しますか?

'待ちtask.run()の重要な違いは何ですか。 return; `および`非同期プログラミングでtask.run() `を返しますか?

DDD
DDDオリジナル
2025-01-30 04:01:08343ブラウズ

What are the key differences between `await Task.Run(); return;` and `return Task.Run()` in asynchronous programming?
非同期プログラミングの重要な違いの詳細な議論

およびキーワードの巧妙な使用は、コードの読みやすさとパフォーマンスを大幅に改善できます。ただし、微妙な質問が表示されます。await Task.Run(); return;return Task.Run()の間に根本的な違いはありますか?この問題を明確にするために、これら2つの方法の操作の詳細について説明します。 異常なコミュニケーションメカニズムの違い

async await重要な違いは、コミュニケーションの異常な方法です。非同期法で遭遇する異常は、await Task.Run(); return;return Task.Run()

、またはの前に睡眠状態を観察することを通じて、

Task、またはawait taskに渡されます。異常がメソッドの同期部分から来たとしても、状況は当てはまります。 task.Wait() task.Result次のシーンを見てみましょう:task.GetAwaiter().GetResult() Task

が一緒に呼び出された場合、それは出力されます:

<code class="language-csharp">static async Task OneTestAsync(int n)
{
    await Task.Delay(n);
}

static Task AnotherTestAsync(int n)
{
    return Task.Delay(n);
}

static void DoTestAsync(Func<int, Task> whatTest, int n)
{
    Task task = null;
    try
    {
        task = whatTest(n);
        Console.Write("Press enter to continue");
        Console.ReadLine();
        task.Wait();
    }
    catch (Exception ex)
    {
        Console.Write("Error: " + ex.Message);
    }
}</code>
検証中に

が異常を引き起こす可能性があることに注意する価値があります。ただし、を使用すると、以下に示すように、異常なコミュニケーションの動作が異なります。 DoTestAsync OneTestAsync非同期および非ステップの実行

<code>Press enter to continue
Error: One or more errors occurred.
Error: 2nd</code>

許容方法の実行と非同期操作(ネットワークI/Oアクセスなど)の実行を同時に促進します。それどころか、Delay(-2)非微分ステップ計算を開始すると、メソッドの実行がタスクが完了するまで中断されます。 AnotherTestAsync

同期コンテキストの影響
<code>Error: The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.
Parameter name: millisecondsDelayError: 1st</code>

非同期操作は同期コンテキストで実行されます。コンテキストは、操作方法とUI要素との通信を決定します。 操作シンボルは、正しいコンテキストで後続のコードが呼び出されることを確認するために、本質的に処理された同期コンテキストです。 がない場合、この責任はプログラマーにかかっているため、死んだロックまたは糸の同期の問題につながる可能性があります。

要するに、

async/awaitの選択は、必要な異常なコミュニケーション挙動、非同期および非ステップ施行、および同期コンテキストの考慮事項に依存します。前者は通常、より正確な異常な治療と正しい同期コンテキスト管理により適していますが、後者は場合によってはコード構造を簡素化できますが、潜在的なトラップを避けるためには注意して使用する必要があります。 return Task.Run()

以上が'待ちtask.run()の重要な違いは何ですか。 return; `および`非同期プログラミングでtask.run() `を返しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。