Task.Factory.StartNew <t>&amp;之间有什么区别吗?任务<T> .Factory.StartNew?</吨> </T>

时间:2014-07-12 07:10:08

标签: .net c#-4.0 task-parallel-library task

根据我的理解,他们是一样的,但我很想知道一个人是否比另一个人有任何优势。如果没有,为什么团队不愿意宣布同一件事的两个版本?

1 个答案:

答案 0 :(得分:0)

从两个函数的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在评论中提到的,我犯了一个错误。所以这两者之间真的没什么区别。