it-swarm.com.de

Warten auf vs Task.Ergebnis einer asynchronen Methode

Was ist der Unterschied zwischen Folgendem:

async Task<T> method(){
    var r = await dynamodb.GetItemAsync(...)
    return r.Item;
}

vs

async Task<T> method(){
    var task = dynamodb.GetItemAsync(...)
    return task.Result.Item;
}

In meinem Fall funktioniert aus irgendeinem Grund nur die zweite. Der erste scheint nie zu enden.

28
luis

await packt das Ergebnis Ihrer Aufgabe asynchron aus, während die Verwendung von Result nur blockieren würde, bis die Aufgabe abgeschlossen wurde.

Siehe diese Erklärung von Jon Skeet.

41
Frank Fajardo

task.Result greift auf den get-Accessor der Eigenschaft zu und blockiert den aufrufenden Thread, bis der asynchrone Vorgang abgeschlossen ist. Dies entspricht dem Aufruf der Wait-Methode . Sobald das Ergebnis einer Operation verfügbar ist, wird es gespeichert und bei nachfolgenden Aufrufen der Result-Eigenschaft sofort zurückgegeben. Beachten Sie, dass die Result-Eigenschaft keinen Wert zurückgibt, wenn während der Ausführung der Aufgabe eine Ausnahme aufgetreten ist oder die Aufgabe abgebrochen wurde. Der Versuch, auf den Eigenschaftswert zuzugreifen, löst stattdessen eine AggregateException-Ausnahme aus. Der einzige Unterschied ist, dass das Warten nicht blockiert. Stattdessen wird asynchron darauf gewartet, dass die Aufgabe abgeschlossen und anschließend fortgesetzt wird

12
NASSER