C# 任务并行库与本机线程同步

C# 任务并行库与本机线程同步,c#,C#,这个问题可能是主观的,但我只想知道何时使用TPL以及何时使用基于本机线程的同步(EVNT、等待句柄) 本机线程同步技术将来会过时吗 谢谢并行扩展非常适合并行化小任务。并行扩展确实提供了代码构造。例如,ForEach将替换普通的ForEach语句,但将并行执行它。这就是并行扩展的目的所在 当您创建一个成熟的多线程应用程序(例如web服务器)时,仍然必须使用正常的线程和同步。当然,WCF和IIS已经为您解决了这些问题 当然,线程池解决了中间问题。尽可能使用TPL,因为它是一种更干净、更具声明性的方式

这个问题可能是主观的,但我只想知道何时使用TPL以及何时使用基于本机线程的同步(EVNT、等待句柄)

本机线程同步技术将来会过时吗


谢谢

并行扩展非常适合并行化小任务。并行扩展确实提供了代码构造。例如,ForEach将替换普通的ForEach语句,但将并行执行它。这就是并行扩展的目的所在

当您创建一个成熟的多线程应用程序(例如web服务器)时,仍然必须使用正常的线程和同步。当然,WCF和IIS已经为您解决了这些问题


当然,线程池解决了中间问题。

尽可能使用TPL,因为它是一种更干净、更具声明性的方式来表达您对并行性的需求

MSDN解释道“TPL动态扩展并发度,以最有效地使用所有可用的处理器。此外,TPL处理工作分区、线程池上线程的调度、取消支持、状态管理和其他低级细节。通过使用TPL,您可以最大限度地提高代码的性能,同时专注于程序设计要完成的工作。”


另请参阅“数据并行性”的好处和其他TPL好处的详细信息。

任务并行库主要不是用于线程同步的,它旨在促进更多的任务。TPL旨在促进以下步骤:

  • 把它分成小块
  • 通过多线程并行执行这些块
  • 在结果可用时,以线程安全和性能良好的方式整理结果
  • 当然,您仍然可以使用已知的线程同步原语以线程安全的方式执行排序结果(例如,当您应该自己整理此结果时,使用类并行)