ホームページ >バックエンド開発 >C++ >C# の ForEach ループ内で非同期操作を適切に使用する方法

C# の ForEach ループ内で非同期操作を適切に使用する方法

DDD
DDDオリジナル
2025-01-05 16:58:40138ブラウズ

How to Properly Use Async Operations within a ForEach Loop in C#?

ForEach での非同期の使用

ForEach ループ内で非同期操作を利用しようとすると、次のようなエラーを受け取る問題が発生する可能性があります。 「名前「Async」は現在のコンテキストに存在しません。」これは、List.ForEach が非同期操作にすぐに対応できないためです。

この問題を解決するには、リストの各要素を非同期操作に投影することをお勧めします。これは、Select メソッドを使用して、リスト内の要素に対応する非同期操作をそれぞれ表すタスクのコレクションを作成することで実現できます。

using (DataContext db = new DataLayer.DataContext())
{
    var tasks = db.Groups.ToList().Select(i => GetAdminsFromGroupAsync(i.Gid));
    var results = await Task.WhenAll(tasks);
}

このアプローチには、いくつかの利点があります。

  • 適切なエラー処理: 非同期操作からの例外は try/catch ブロックでキャッチできません。 Task.WhenAll を使用すると、例外が確実に伝播され、自然な例外処理が可能になります。
  • 完了追跡: Task.WhenAll を待機することにより、コードはすべての非同期操作が完了したことを確認します。 ForEach で非同期 void デリゲートを使用する場合、この知識はすぐには得られません。
  • 直感的な構文: GetAdminsFromGroupAsync が戻り値を暗黙的に示すため、結果を取得するための構文はより直感的であり、より自然な結果を可能にします。プログラミング スタイル。

以上がC# の ForEach ループ内で非同期操作を適切に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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