des Betrachtennicht async Lambda
Task task = new Task (async() =>{
await TaskEx.Delay(1000);
});
task.Start();
task.Wait();
Der Aufruf task.Wait() nicht warten, bis die Aufgabenerledigung und die nächste Zeile wird sofort ausgeführt, erwarten aber, wenn ich von dem Asynchron-Lambda-Ausdruck in eine wickeln Methodenaufruf funktioniert der Code wie erwartet.
private static async Task AwaitableMethod()
{
await TaskEx.Delay(1000);
}
dann (aktualisiert nach Kommentar von svick)
await AwaitableMethod();
In der 'AwaitableMethod' Sie tatsächlich zurückkehrt und Warten der Aufforderung an die Aufgabe aus der .Delay() zurück Methode (ich gehe davon aus, dass es eine 'Aufgabe' zurückgibt). In dem asynchronen Lambda, das Sie aufrufen, warten Sie auf die Task-Task. Aber trotzdem habe ich keine Erklärung. –
Sie sollten sehr vorsichtig sein, wenn Sie "warten" mit "Warten()" mischen. In vielen Fällen kann dies zu Deadlocks führen. – svick
@svick fand ein großartiges [Beispiel] (http://stackoverflow.com/a/11179035/815938) über das Mischen von 'erwarten' mit' Wait() ' – kennyzx