Wie bereits erwähnt, können Sie await
verwenden. Wenn Sie den Code synchron ausführen müssen, wie bereits erwähnt .GetAwaiter().GetResult()
, .Result
oder .Wait()
, besteht wie viele in Kommentaren/Antworten gesagt haben, ein Risiko für Deadlocks. Da die meisten von uns Einzeiler mögen, können Sie diese für .Net 4.5<
verwenden
Ein Wert über eine Async-Methode abrufen:
var result = Task.Run(() => asyncGetValue()).Result;
Ein Async-Methoden synchron aufrufen:
Task.Run(() => asyncMethod()).Wait();
Es treten keine Deadlock-Probleme aufgrund der Verwendung von Task.Run
auf.
Quelle:
https://stackoverflow.com/a/32429753/3850405
Update:
Könnte zu einem Deadlock führen, wenn der aufrufende Thread aus dem Threadpool stammt. Folgendes passiert: Eine neue Aufgabe wird am Ende der Warteschlange eingereiht, und der Thread aus dem Threadpool, der schließlich die Aufgabe ausführen würde, wird blockiert, bis die Aufgabe ausgeführt ist.
Quelle:
https://medium.com/rubrikkgroup/understanding-async-avoiding-deadlocks-e41f8f2c6f5d