TaskFactory.StartNew或TaskFactory.FromAsync:哪一个可以保证在应用程序中更快地执行计算密集型TPL任务?

时间:2013-05-22 16:16:57

标签: .net task-parallel-library

如果我从UI点击按钮开始计算密集型TPL任务,那么哪种方法最好: TaskFactory.StartNew TaskFactory.FromAsync ?我需要以下内容:任务不能挂起UI,快速完成工作,此外,在应用程序中可以执行其他一些TPL任务。这里的时间是对应用程序中运行的所有任务的工作速度的关键要求。在哪种情况下,开销会减少,任务执行速度会增加?

1 个答案:

答案 0 :(得分:3)

这两种方法是为完全不同的目的而设计的。

TaskFactory.StartNew(或.NET 4.5中的Task.Run)允许您使用委托启动某些工作。

TaskFactory.FromAsync有不同的用途。它的目的是使用Asynchronous Programming Model (APM)来定义一个异步方法的方法对,并将其转换为Task<T>。这将采用现有的异步方法并将其转换为新的Task<T>类型,从而允许与其他任务合成。

通常,与正在完成的工作相比,运行Task的开销应该很小,特别是如果工作“计算成本高”的话。如果您正在处理一组任务,我会使用Task.RunTask.Factory.StartNew来启动单个任务,使用Parallel类方法(或PLINQ)。

如果您正在尝试处理许多工作项(更多工作项,然后处理系统上的元素/ CPU内核),这些类将提供更好的性能,因为它们将预先处理工作分区以减少开销并行化。