C# Task.Run()与创建任务实例然后启动()相同吗?
这是我一直使用的:C# Task.Run()与创建任务实例然后启动()相同吗?,c#,async-await,task,C#,Async Await,Task,这是我一直使用的: var task=task.Run(DoSomething) 我想知道如果我用这个来代替,是否会有所不同: var task = new Task(DoSomething); task.Start(); 说: 而不是调用此构造函数,最常见的方法是 通过调用静态 Task.Run(操作) 在第一种情况下,任务立即启动。这是一个明显的区别,但除此之外,我不清楚是否有任何(相关的)区别 MSDN没有说明使用的选项是否相同。 对于Task.Run()他们希望它将使用denychil
var task=task.Run(DoSomething)代码>
我想知道如果我用这个来代替,是否会有所不同:
var task = new Task(DoSomething);
task.Start();
说:
而不是调用此构造函数,最常见的方法是
通过调用静态
Task.Run(操作)
在第一种情况下,任务立即启动。这是一个明显的区别,但除此之外,我不清楚是否有任何(相关的)区别
MSDN没有说明使用的选项是否相同。
对于Task.Run()
他们希望它将使用denychildatach
并使用默认的调度程序
但是,对于Start()
来说,它使用的创建选项是不正确的
但还有另一个区别:Start()
将使用当前任务计划程序,而不是默认任务计划程序
根据这一点,current与default不同,current不应该与async/await结合使用,但是我必须承认,我不完全理解两者之间的区别,我想知道在决定Start()
与Task.Run()
时它是否重要
长话短说:看到这些差异,我想知道它们与async/await结合使用时是否相关?如果它们是相关的,为什么?MSN文档只说我可能想使用Task.Run()
,但没有解释原因。StartNew
类似于带有Task.Start
的任务构造函数。我有一篇博文详细介绍了这两种方法,这两种方法都适用于任务构造函数和task.Start
。特别是,构造函数不理解异步委托,默认情况下,Start
使用当前调度程序,而不是默认调度程序
我还有一个(抱歉,还没有完成!)详细介绍了所有任务
成员(以及相关类型),讨论了在哪些情况下最适合使用哪些成员。有趣的是,Task
constructor()或Task.Start
()根本没有用例。总有更好的解决办法。你的问题是什么?您已经发现了许多差异,注意到Task.Run
适用于异步代码,而Start
则不适用。@StephenCleary我更新了问题,使之更清楚。我可以看到差异,但我不知道它们有什么关系。“StartNew类似于task.Start的任务构造函数”-这是很好的信息。我读了StartNew()
的所有缺点。