In C# Ich habe die folgenden zwei einfache Beispiele:.erwarten Task.Delay() vs. Task.Delay() Wait()
[Test]
public void TestWait()
{
var t = Task.Factory.StartNew(() =>
{
Console.WriteLine("Start");
Task.Delay(5000).Wait();
Console.WriteLine("Done");
});
t.Wait();
Console.WriteLine("All done");
}
[Test]
public void TestAwait()
{
var t = Task.Factory.StartNew(async() =>
{
Console.WriteLine("Start");
await Task.Delay(5000);
Console.WriteLine("Done");
});
t.Wait();
Console.WriteLine("All done");
}
Das erste Beispiel erzeugt eine Aufgabe, die Drucke auf "Start", wartet 5 Sekunden lang druckt "Done" und beendet dann die Aufgabe. Ich warte bis die Aufgabe beendet ist und drucke dann "All done". Wenn ich den Test ausführe, funktioniert es wie erwartet.
Der zweite Test sollte das gleiche Verhalten haben, mit der Ausnahme, dass das Warten in der Task aufgrund der Verwendung von async nicht blockierend sein sollte und warten. Aber dieser Test druckt nur "Start" und dann sofort "All done" und "Done" wird nie gedruckt.
Ich weiß nicht, warum ich dieses Verhalten erhalten: S Jede Hilfe sehr geschätzt werden würde :)
Task.Delay ist nicht blockierend. Ich sehe keinen Grund, warum Sie das 2. Konstrukt verwenden würden. –
@RoyDictus haben beide ihre eigenen Probleme. Sie sollten niemals "Task.Wait()' – Gusdor
mögliche Duplikate von [Warten auf async/erwarten in einer Aufgabe] (http://stackoverflow.com/questions/24777253/waiting-for-async-await-inside-a- Aufgabe) – i3arnon