【发布时间】:2019-11-19 06:47:21
【问题描述】:
我正在编写一个将在 ASP.NET Core (2.2) 上运行的服务。在请求/响应的上下文中执行的工作是高度 CPU 密集型的,并且不依赖于 I/O 或其他基于网络的服务。由于正在执行的工作的性质,动态并行似乎是最好的方法。这不是调用 Parallel.ForEach 的问题,而是根据需要创建和运行任务。
这就是背景。我没有弄清楚的是: 使用等待异步模式有优点还是缺点?我可以创建任务并使用诸如 Task.WaitAll 和 Task.WaitAny 之类的阻塞调用来等待它们,或者我可以创建任务并使用诸如 Task.WhenAll 和 Task.WhenAny 之类的非阻塞调用来等待它们。
我在各种网站上看到了使用 Task.Wait* 方法来实现动态并行性的建议(尤其是在 Stephen Cleary 的书“C# Cookbook 中的并发”,第 3.4 章),但我不太明白为什么.在进行动态并行时使用阻塞调用有固有的优势吗? async/await 方法在等待被调用任务完成时释放调用任务,难道不是提供自己的优势吗?
【问题讨论】:
标签: c# async-await task-parallel-library