如果我通过从 UI 中单击按钮来启动计算密集型 TPL 任务,这里哪种方法最好:TaskFactory.StartNew或TaskFactory.FromAsync?我需要以下几点:任务不能挂 UI,快速完成它的工作,此外,在应用程序中可以处理一些其他 TPL 任务。这里的时间是应用程序中运行的所有任务的工作速度的关键需求。在哪种情况下开销会更少并且任务执行速度会增加?
问问题
228 次
1 回答
3
这两种方法是为完全不同的目的而设计的。
TaskFactory.StartNew
(或Task.Run
在 .NET 4.5 中)允许您使用委托启动一些工作。
TaskFactory.FromAsync
服务于不同的目的。其目的是采用使用异步编程模型 (APM)定义异步方法的方法对,并将其转换为Task<T>
. 这采用现有的异步方法并将其转换为新Task<T>
类型,从而允许与其他任务组合。
一般来说,与正在完成的工作相比,运行任务的开销应该很小,特别是如果工作“计算成本很高”。如果您正在处理一组任务,我将使用Task.Run
或Task.Factory.StartNew
启动单个任务和类方法(或 PLINQ)。Parallel
如果您尝试处理许多工作项(工作项比系统上的处理元素/CPU 内核多得多),这些类将提供更好的性能,因为它们将预先处理工作分区以减少并行化的开销。
于 2013-05-22T16:21:36.697 回答