Ich versuche, diesen Code zu verstehen:
%Vor% Die Methode Example
endet niemals und blockiert für immer. Warum?
Die Korrektur (aus Stubbing-Aufgabe Methode im asynchronen Komponententest zurückzugeben ) soll await new Task( () => {})
durch return Task.FromResult<object>(null);
ersetzen, aber nochmal, warum ist das nötig?
Ich weiß, dass es eine Menge Fragen gibt, die denen ähnlich sind, aber keine, die ich gesehen habe, scheint zu erklären, warum dies geschieht:
await
keyword AFAIK korrekt Task.FromResult
, aber nicht warum await new Task(() => {})
nicht funktioniert Auch wenn Sie es in
geändert haben %Vor%es wird möglicherweise immer noch nicht abgeschlossen. Wenn Sie diese Zeile berühren, erstellt das Programm eine Fortsetzungsaufgabe, die nach Abschluss der Aufgabe fortgesetzt wird. Die Tatsache, dass die Aufgabe leer ist, ist irrelevant. An diesem Punkt kehrt der Kontrollfluss zu
zurück %Vor%wartet auf den Abschluss der Aufgabe und blockiert den aktuellen Thread .
Wenn die Aufgabe abgeschlossen ist, wird versucht, mit dem aktuellen Thread fortzufahren. Dies ist jedoch nicht möglich, da der Thread durch den Aufruf von Wait () blockiert wird.
Ändern Sie die erwartete Zeile in
%Vor%Dies ist ein häufiges Deadlock-Problem. Mischen Sie nicht Wait () und warten Sie ab. Siehe Ссылка
Tags und Links .net c# async-await asynchronous task