爲什麼我在使用Task.Run
與Task.Start
時看到行爲上的差異?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
請注意,我所遇到的是意味着對使用任務的博客.Start: https://blogs.msdn.microsoft.com/pfxteam/2010/06/13/task-factory-startnew-vs-new-task-start/
在你提供的兩個例子中,不同的是你調用Task.Run()或Task.Start()。請參閱標記的重複內容,瞭解差異的重要性。簡短版本:在第一個示例中,您沒有提供任何機制來等待實際的RunAsync()工作,因此,在RunAsync()運行之前,您首先訪問_「In Approach1」_輸出。 –