wartet auf Task.Result in einer asynchronen Methode [duplizieren]

7

Was ist der Unterschied zwischen den folgenden Schritten:

%Vor%

vs

%Vor%

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

    
luis 27.08.2015, 02:20
quelle

2 Antworten

16

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

Siehe diese Erklärung von Jon Skeet.

    
Frank Fajardo 27.08.2015, 02:27
quelle
4

task.Result greift auf die Get Accessor-Blöcke der Eigenschaft zu der aufrufende Thread, bis die asynchrone Operation abgeschlossen ist; Dies entspricht dem Aufruf der Methode Wait . 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 Ergebniseigenschaft keinen Wert zurückgibt, wenn eine Ausnahme während des Vorgangs der Aufgabe aufgetreten ist oder wenn die Aufgabe abgebrochen worden ist. Stattdessen versucht der Zugriff auf den Eigenschaftswert eine AggregateException-Ausnahme. Der einzige Unterschied ist, dass die Wartezeit nicht blockiert wird. Stattdessen wird asynchron auf den Abschluss der Aufgabe gewartet und dann fortgesetzt

    
X-TECH 27.08.2015 02:27
quelle