使用 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中文网其他相关文章!