首页 >后端开发 >C++ >如何在 C# 的 ForEach 循环中正确使用异步操作?

如何在 C# 的 ForEach 循环中正确使用异步操作?

DDD
DDD原创
2025-01-05 16:58:40134浏览

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,代码确定所有异步操作已完成。当将 async void delegate 与 ForEach 一起使用时,这些知识并不容易获得。
  • 直观语法: 检索结果的语法更加直观,因为 GetAdminsFromGroupAsync 暗示了一个返回值,允许更自然的编程风格。

以上是如何在 C# 的 ForEach 循环中正确使用异步操作?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn