Task.Factory.StartNew 和 Task 之间有什么区别<T><T>吗?工厂.开始新的?



根据我的理解,它们是相同的,但我很想知道其中一个是否比另一个有任何优势。如果不是,为什么团队要声明同一事物的两个版本呢?

这两个函数的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赋值给一个变量,并将其用于更简单的代码。

更新:正如@Kirill Shlenskiy在评论中提到的,我犯了一个错误。所以这两者之间真的没有区别。

最新更新