Warum sehe ich einen Unterschied im Verhalten bei der Verwendung von Task.Run
vs Task.Start
?Task.Run vs Task.Start
Code-Snippet:
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();
}
tatsächliche Ausgang:
In Approach1
In RunAsync
In RunAsync
In Approach2
ich die folgende Ausgabe zu erwarten:
In RunAsync
In Approach1
In RunAsync
In Approach2
Bitte beachte, dass ich auf dem Blog gekommen sind, die Aufgabe schlägt vor, gegen die Verwendung von .Start: https://blogs.msdn.microsoft.com/pfxteam/2010/06/13/task-factory-startnew-vs-new-task-start/
Es gibt mehr Unterschiede in den beiden Beispielen, die Sie angeben, als nur, ob Sie 'Task.Run()' oder 'Task.Start()' aufrufen. Sehen Sie sich die markierten Duplikate an, warum dieser Unterschied wichtig ist. Kurze Version: In Ihrem ersten Beispiel haben Sie keinen Mechanismus zur Verfügung gestellt, um auf die 'RunAsync()' -Arbeit zu warten, also gelangen Sie zuerst zum _ "In Approach1" _-Ausgang, bevor 'RunAsync()' ausgeführt wird . –