ホームページ > バックエンド開発 > C++ > Task.Start/Wait と Async/Await: 長時間実行オペレーションの処理の違いは何ですか?

Task.Start/Wait と Async/Await: 長時間実行オペレーションの処理の違いは何ですか?

Barbara Streisand
リリース: 2025-01-10 22:36:41
オリジナル
264 人が閲覧しました

Task.Start/Wait vs. Async/Await:  What's the Difference in Handling Long-Running Operations?

Task.Start/Wait と Async/Await: 時間のかかる操作の処理の違い

マルチスレッドと非同期プログラミングの世界では、Task.Start/Wait メソッドと async/await メソッドの違いを理解することが重要です。これら 2 つのテクノロジは、時間のかかる操作を処理するための異なるメカニズムを提供し、それによってアプリケーションの応答性とパフォーマンスを向上させます。

Task.Start/Wait: 同期ブロック

Task.Start/Wait メソッドで、Task.Factory.StartNew(Action) を使用して新しいタスクを作成し、時間のかかる操作を実行するためのデリゲートを割り当てます。 t.Wait() 呼び出しは、タスクの実行が完了するまで呼び出しスレッドを強制的に待機させます。

次のコード スニペットを考えてみましょう:

<code class="language-csharp">public void MyMethod()
{
  Task t = Task.Factory.StartNew(DoSomethingThatTakesTime);
  t.Wait();
  UpdateLabelToSayItsComplete();
}</code>
ログイン後にコピー

この例では、呼び出し元のスレッドは、DoSomethingThatTakesTime() 操作が完了した後にのみ UpdateLabelToSayItsComplete() メソッドを実行します。このメソッドは呼び出しスレッドの処理をブロックするため、他のタスクの実行が遅れます。

非同期/待機: 非同期ノンブロッキング

対照的に、async/await メソッドは非同期プログラミングを使用して、呼び出しスレッドをブロックせずに時間のかかる操作を実行します。 async void キーワードを使用すると、メソッドを非同期にすることができ、タスクが完了するまで await オペレーターが呼び出し元に制御を渡します。

これは、async/await を使用した更新されたコード スニペットです:

<code class="language-csharp">public async void MyMethod()
{
  var result = Task.Factory.StartNew(DoSomethingThatTakesTime);
  await result;
  UpdateLabelToSayItsComplete();
}</code>
ログイン後にコピー

この場合、await result ステートメントは、DoSomethingThatTakesTime() タスクが完了するまで MyMethod() メソッドの実行を一時停止します。同時に、呼び出し元のスレッドは他のタスクを自由に実行できます。

類推による理解の違い

レストランのシナリオを想像してください。ウェイターに注文し、スープが到着するまで友人を無視することを選択するか (Task.Wait)、または友人と話し、チャットが一時停止している間にウェイターにスープを届けてもらいます (async/)待つ)。

以上がTask.Start/Wait と Async/Await: 長時間実行オペレーションの処理の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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