我有方法:
private static void Method()
{
Console.WriteLine("Method() started");
for (var i = 0; i < 20; i++)
{
Console.WriteLine("Method() Counter = " + i);
Thread.Sleep(500);
}
Console.WriteLine("Method() finished");
}
我想在新任务中启动此方法。我可以像这样开始新任务
var task = Task.Factory.StartNew(new Action(Method));
或这个
var task = Task.Run(new Action(Method));
但是Task.Run()
和之间有什么区别Task.Factory.StartNew()
。创建Task实例后,他们两个都立即使用ThreadPool并启动Method()。什么时候应该使用第一个变量,什么时候应该使用第二个变量?
StartNew
默认情况下使用TaskScheduler.Current
,它可能是线程池,也可能是UI线程。