使用Async 和ForEach 查詢資料
在C# 中使用非同步操作時,了解如何將它們與程式碼正確整合非常重要像ForEach這樣的塊。嘗試在 ForEach 語句中使用 Async 關鍵字時會出現一個常見問題,這可能會導致編譯錯誤。
錯誤:當前上下文中不存在Async
如下面的程式碼片段所示,嘗試在ForEach 語句中使用Async 可能會導致錯誤:
using (DataContext db = new DataLayer.DataContext()) { db.Groups.ToList().ForEach(i => async { await GetAdminsFromGroup(i.Gid); }); }
The發生錯誤是因為當前上下文中不存在名稱「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中文網其他相關文章!