ホームページ >バックエンド開発 >C++ >Task.Start/Wait と Async/Await: 非同期プログラミングの主な違いは何ですか?

Task.Start/Wait と Async/Await: 非同期プログラミングの主な違いは何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-10 22:23:46338ブラウズ

Task.Start/Wait vs. Async/Await: What's the Key Difference in Asynchronous Programming?

Task.Start/Wait と Async/Await: 違いは何ですか?

非同期プログラミングの世界では、Task.Start/Wait を使用する同期メソッドと Async/Await を使用する非同期メソッドの違いを理解することが重要です。

次のコード スニペットをご覧ください:

<code class="language-csharp">public void MyMethod()
{
  Task t = Task.Factory.StartNew(DoSomethingThatTakesTime);
  t.Wait();
  UpdateLabelToSayItsComplete();
}

public async void MyMethod()
{
  var result = Task.Factory.StartNew(DoSomethingThatTakesTime);
  await result;
  UpdateLabelToSayItsComplete();
}</code>

最初のコード スニペットでは、従来の Task.Start/Wait 同期メソッドを使用します。仕組みは次のとおりです:

  • Task.Factory.StartNew を使用して新しいタスクを作成し、DoSomethingThatTakesTime メソッドで時間のかかる操作を実行します。
  • タスクで Wait() メソッドを呼び出して、現在のスレッドをブロックします。これは、プログラムがタスクが完了するまで待機することを意味します。

対照的に、2 番目のコード スニペットは、Async/Await を使用した非同期アプローチを示しています。

  • 再び、前と同じようにタスクを開始します。
  • ただし、Wait() を使用してスレッドをブロックする代わりに、await キーワードを使用します。これにより、バックグラウンド タスクの実行中も現在のスレッドが実行を継続します。
  • タスクが完了すると、メッセージが自動的にメッセージ キューに追加され、await に続くコード セクションが実行を再開する必要があることが示されます。

これら 2 つのメソッドの主な違いは、タスクの実行中のスレッドの動作です。 Task.Start/Wait を使用すると、スレッドがブロックされ、他のイベントに応答できなくなります。対照的に、Async/Await を使用すると、スレッドは応答を待機している間に他のタスクを実行できます。

レストランでランチを注文するところを想像してみてください。食事の前に隣に座っている人を無視するように Task.Start/Wait を使用します。 Async/Await を使用すると、スープが提供されるのを待っている間、友人と会話を続けるようなものです。バックグラウンド作業はまだ行われていますが、スレッドは結果を待っている間に他の操作を実行できます。

以上がTask.Start/Wait と Async/Await: 非同期プログラミングの主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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