根据我的理解,它们是相同的,但我很想知道其中一个是否比另一个有任何优势。如果不是,为什么团队要声明同一事物的两个版本呢?
这两个函数的MSDN文档:
对于TaskFactory.StartNew<TResult>
:调用StartNew在功能上相当于使用其构造函数之一创建Task<TResult>
…
对于TaskFactory<TResult>.StartNew
:调用StartNew在功能上相当于使用Task<TResult>
构造函数之一创建任务…
实际上,从功能的角度来看,两者有细微的差别:
第一次使用Task<T>
类时,静态构造函数创建一个新的TaskFactory<T>
对象并存储它。这实际上是一个小对象,但占用的内存将保持到AppDomain生命周期结束,但Task
的静态构造函数只创建一个TaskFactory
对象。
所以如果你将使用很多类型来创建任务,使用Task.Factory.StartNew<T>
,因为你不会让运行时创建所有的TaskFactory<T>
对象。如果只有一个或两个类型,将Task<T>.Factory
赋值给一个变量,并将其用于更简单的代码。