Async と ForEach を使用したデータのクエリ
C# で非同期操作を扱う場合、非同期操作をコードと適切に統合する方法を理解することが重要ですForEach のようなブロック。 ForEach ステートメント内で Async キーワードを使用しようとすると、一般的な問題が 1 つ発生し、コンパイル エラーが発生する可能性があります。
エラー: Async は現在のコンテキストに存在しません
以下のコード スニペットに示されているように、ForEach ステートメント内で Async を使用しようとすると、 error:
using (DataContext db = new DataLayer.DataContext()) { db.Groups.ToList().ForEach(i => async { await GetAdminsFromGroup(i.Gid); }); }
現在のコンテキストに「Async」という名前が存在しないため、エラーが発生します。これは、ForEach が非同期デリゲートをサポートしていないためです。
Task.WhenAll を使用した代替アプローチ
ForEach ステートメント内で非同期操作を効果的に処理するには、Task を使用できます。 WhenAll メソッド。このアプローチには、各要素を非同期操作に投影することが含まれます。
using (DataContext db = new DataLayer.DataContext()) { var tasks = db.Groups.ToList().Select(i => GetAdminsFromGroupAsync(i.Gid)); var results = await Task.WhenAll(tasks); }
このアプローチには、いくつかの利点があります。
以上がC# ForEach ループ内で非同期操作を適切に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。