C# 中的异步/等待和并行 [关闭]
Posted
技术标签:
【中文标题】C# 中的异步/等待和并行 [关闭]【英文标题】:Async/await and parallel in C# [closed] 【发布时间】:2012-12-15 11:46:00 【问题描述】:什么时候应该使用 async/await,什么时候应该在 C# 中使用 parallel.foreach?并行和异步/等待是否具有相同的目的? 它们有什么区别?
【问题讨论】:
查看相关问题:***.com/questions/9898441/… 看看如何并行调用异步操作***.com/questions/11564506/… 这怎么没有建设性? 【参考方案1】:async/await 是关于异步,而Parallel.ForEach
是关于并行。它们是相关的概念,但并不相同。
Parallel.ForEach
用于当您想对集合中的所有项目并行执行相同的操作,阻塞当前线程直到所有操作完成。
async/await 用于当前操作在特定异步操作完成之前无法取得更多进展,但您不想阻塞当前线程。这在两种情况下特别有用:
编写基本上启动各种异步操作的代码,一个接一个地,在 UI 线程上,在操作之间短暂访问 UI。 (它比这更通用,但这是一个简单的示例。)您不想阻塞 UI 线程,但管理所有这些异步操作是一件很痛苦的事情。 一次处理很多个长时间运行的操作 - 例如在网络服务器中。由于调用其他 Web 服务、数据库等,每个单独的请求可能需要很长时间 - 但您不希望每个请求有一个线程,因为线程是一种相对昂贵的资源。您可以通过启动一个名为Parallel.ForEach
的新任务,然后等待该任务来结合并行性和异步性。 (仅举一个例子。)
【讨论】:
以上是关于C# 中的异步/等待和并行 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章