Asynchronous C语言中的异步/等待与并行#

Asynchronous C语言中的异步/等待与并行#,asynchronous,async-await,parallel.foreach,Asynchronous,Async Await,Parallel.foreach,什么时候应该使用async/await,什么时候应该在C#中使用parallel.foreach?并行和异步/等待是否具有相同的用途? 它们之间的区别是什么?

什么时候应该使用async/await,什么时候应该在C#中使用parallel.foreach?并行和异步/等待是否具有相同的用途? 它们之间的区别是什么?

Parallel.ForEach是关于并行的。它们是相关的概念,但不同

Parallel.ForEach
用于并行地对集合中的所有项执行相同的操作,阻塞当前线程,直到所有操作完成

async/await用于当前操作在特定异步操作完成之前无法取得任何进展,但您不想阻止当前线程的情况。这在两种情况下特别有用:

  • 在UI线程上编写基本上启动各种异步操作的代码,在操作之间短暂访问UI。(它比这更一般,但这是一个简单的例子。)您不想阻止UI线程,但管理所有这些异步操作是一件痛苦的事情
  • 一次处理大量长时间运行的操作—例如在web服务器中。由于调用其他web服务、数据库等,每个请求可能需要很长时间,但您不希望每个请求都有一个线程,因为线程是一种相对昂贵的资源

您可以通过启动一个新任务来组合并行性和异步性,该任务将调用
Parallel.ForEach
,然后等待该任务。(就像一个例子。)

看看这个相关的问题:看看如何并行调用异步操作这怎么不是建设性的?