2

如果我通过从 UI 中单击按钮来启动计算密集型 TPL 任务,这里哪种方法最好:TaskFactory.StartNewTaskFactory.FromAsync?我需要以下几点:任务不能挂 UI,快速完成它的工作,此外,在应用程序中可以处理一些其他 TPL 任务。这里的时间是应用程序中运行的所有任务的工作速度的关键需求。在哪种情况下开销会更少并且任务执行速度会增加?

4

1 回答 1

3

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

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

TaskFactory.FromAsync服务于不同的目的。其目的是采用使用异步编程模型 (APM)定义异步方法的方法对,并将其转换为Task<T>. 这采用现有的异步方法并将其转换为新Task<T>类型,从而允许与其他任务组合。

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

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

于 2013-05-22T16:21:36.697 回答