ホームページ >バックエンド開発 >C++ >Task.Run と Async キーワード: 非同期操作にそれぞれをいつ使用するか?

Task.Run と Async キーワード: 非同期操作にそれぞれをいつ使用するか?

DDD
DDDオリジナル
2025-01-05 11:48:39138ブラウズ

Task.Run vs. Async Keyword: When to Use Each for Asynchronous Operations?

Do Work メソッドの非同期性: Task.Run と Async キーワード

非同期プログラミングの領域では、非同期実行と非同期実行の区別があります。待ちやすさは微妙な違いがあるかもしれません。 Task.Run と async キーワードの詳細を詳しく調べて、同期または非同期で実行するメソッドの作成におけるそれらの役割を理解しましょう。

非同期実行: Task.Run

Task.Run メソッドを使用すると、コードの実行をバックグラウンド スレッドに委任できます。コードをカプセル化する Task オブジェクトを作成することにより、Task.Run を使用すると、現在の実行パスをブロックせずにコードを非同期的に実行できます。ただし、Task.Run を使用してもメソッドが待機可能になるとは限りません。

待機可能性: 非同期キーワード

非同期メソッドは、待機時に一時停止および再開できるメソッドです。表現。これにより、メソッドはブロックせずに呼び出しスレッドに実行ポイントを返すことができます。 async として宣言されたメソッドは、Task または Task を返すことができます。 (パラメータ化された戻り値の場合)。

例: 非同期/待機なしの実行

// Not async because it does not use await
private Task<int> DoWorkAsync()
{
  return Task.Run(() =>
  {
    return 1 + 2;
  });
}

この例では、Task を返します。 Task.Run デリゲートから。ただし、メソッド自体は await を使用しないため、非同期として宣言されません。

例: Await による非同期実行

private async Task<int> GetWebPageHtmlSizeAsync()
{
  var client = new HttpClient();
  var html = await client.GetAsync("http://www.example.com/");
  return html.Length;
}

この例では、メソッドは async として宣言されており、HttpClient.GetAsync 操作で await を使用して実行を一時停止します。 Web ページのダウンロード中にメソッドは呼び出し元に返され、結果が利用可能になったら再開します。

ベスト プラクティス:

  1. を検討してください。 async キーワードを使用して、実行を一時停止および再開できるメソッドを作成します。
  2. Task.Run を使用してコードを非同期的に実行しますバックグラウンド スレッド上で実行しますが、現在の実行パスのブロックを避ける必要がある場合に限ります。
  3. Task.Run で同期メソッドを完全にラップすることは避けてください。同期メソッドには同期シグネチャが必要です。

結論:

Task.Run は、コードをバックグラウンド スレッドに委任することで非同期実行を容易にします。 async キーワードにより待機可能になり、メソッドの実行の一時停止と再開が可能になり、応答性の高い効率的なコードを作成する柔軟性が得られます。

以上がTask.Run と Async キーワード: 非同期操作にそれぞれをいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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