为什么我在使用Task.Run和使用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/
发布于 2017-07-18 13:11:56
在approach1中,您可以使用await。await实际上并不等待任何东西。所以你在你的任务中有一个异步运行的aysynchonous任务。然后,它触发并忘记RunAsync方法,在async方法仍在运行时结束任务。
https://stackoverflow.com/questions/45157946
复制相似问题