Task.Run
とTask.Start
を使用したときの動作に違いがあるのはなぜですか?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 RunAsync
In Approach1
In RunAsync
In Approach2
注:
In Approach1
In RunAsync
In RunAsync
In Approach2
を私は次の出力が期待されます。スタート: https://blogs.msdn.microsoft.com/pfxteam/2010/06/13/task-factory-startnew-vs-new-task-start/
「Task.Run()」か「Task.Start()」のどちらを呼び出すかだけではなく、2つの例の違いがあります。その違いがなぜ重要であるかについては、重複しているマークを参照してください短いバージョン:最初の例では、実際の 'RunAsync()'作業を待つメカニズムを提供していないので、 'RunAsync()'が実行される前に、_ "In Approach1" _出力を最初に取得します。 。 –