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 サイトの他の関連記事を参照してください。