ホームページ > バックエンド開発 > C++ > 非同期 C# メソッドでタスクを待機するか返す必要がありますか?

非同期 C# メソッドでタスクを待機するか返す必要がありますか?

DDD
リリース: 2025-01-04 04:12:39
オリジナル
689 人が閲覧しました

Should I Await or Return Tasks in Async C# Methods?

非同期メソッドの待機と復帰: 結果の調査

C# で非同期プログラミングを使用する場合、開発者は、別のメソッド内で非同期メソッドの呼び出しを待機するかどうかという問題に遭遇することがよくあります。 async メソッドを使用するか、単にタスクを返します。どちらのアプローチも有効に見えますが、各オプションには考慮に値する明確な結果があります。

オプション A: タスクを直接返す

このアプローチでは、非同期メソッドは直接返します。ネストされた非同期呼び出しから取得されたタスク。これは、次のように記述するのと似ています。

Task FooAsync()
{
    return BazAsync();  // Option A
}
ログイン後にコピー

結果:

  • 呼び出し元は、返されたタスクを待つ責任があります。
  • メソッド同期と非同期の両方から呼び出すことができますコンテキスト。
  • メソッドの同期コード内でスローされた例外は同期的に配信されます。
  • 引数の検証は同期的に実行できます。

オプション B:タスクを待機中

のときタスクを待っている間、async メソッドはネストされた非同期呼び出しが完了するのを明示的に待ちます。これは次のように記述されます:

async Task BarAsync()
{
    await BazAsync(); // Option B
}
ログイン後にコピー

結果:

  • メソッドは待機操作を実行するため、非同期として宣言する必要があります。
  • 呼び出し元はメソッド自体を待つ必要はありません。
  • 内部でスローされる例外非同期コードは非同期的に配信されます。
  • 引数の検証は同期的に実行できません。

正しいオプションの選択

返す間の選択または待機中は特定のシナリオによって異なります。

メソッドが少量の同期作業を実行し、非同期メソッドを 1 つだけ呼び出す場合は、タスクを返す (オプション A) 方が効率的なアプローチになる可能性があります。ただし、メソッドが追加の非同期作業を実行する必要がある場合、または例外を非同期で処理する必要がある場合は、タスクを待機する (オプション B) が適切な選択です。

async として宣言されたメソッドはタスクを直接返すことができないことに注意することが重要です。メソッドがタスクを返す必要がある場合は、メソッド自体を非同期として宣言する必要があります。

実際の例

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

// Version 1:
Task BarAsync()
{
    // No need to gronkle yet...
    return BazAsync();
}

// Oops, for version 2 I need to do some more work...
async Task BarAsync()
{
    int gronkle = await GronkleAsync();
    // Do something with gronkle

    // Now we have to await BazAsync as we're now in an async method
    await BazAsync();
}
ログイン後にコピー

当初、メソッド BarAsync は BazAsync を待つ必要がなかったので、タスクを直接返しました。ただし、追加の非同期作業が導入された場合、BarAsync を非同期メソッドに変換して BazAsync を待つ必要がありました。

非同期メソッドでの戻りまたは待機の結果を理解することで、開発者は非同期コードを効果的に実装し、潜在的な落とし穴を回避できます。 .

以上が非同期 C# メソッドでタスクを待機するか返す必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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