使用Task.Run
vs Task.Start
时,为什么会发现行为上的差异?
代码段:
async Task<string> RunAsync()
{
await Task.Delay(2);
Console.WriteLine("In RunAsync");
return "{}";
}
void Approach1()
{
var task = new Task(async () => await RunAsync());
task.Start();
task.Wait();
Console.WriteLine("In Approach1");
}
void Approach2()
{
var task = Task.Run(() => RunAsync());
task.Wait();
Console.WriteLine("In Approach2");
}
void Main()
{
Approach1();
Approach2();
}
实际输出:
In Approach1
In RunAsync
In RunAsync
In Approach2
我期待以下输出:
In RunAsync
In Approach1
In RunAsync
In Approach2
请注意,我发现建议不要使用Task.Start的博客: https://blogs.msdn.microsoft.com/pfxteam/2010/06/13/task-factory-startnew-vs-new-task-start/
答案 0 :(得分:0)
在approach1中你使用await。 await实际上并没有等待任何事情。所以你在Task中有一个异步任务,它是异步运行的。然后它会触发并忘记RunAsync方法,在异步方法仍在运行时结束任务。