Is .GetAwaiter (). GetResult (); sicuro per uso generale?

Ho letto in alcuni punti quello .GetAwaiter().GetResult(); potrebbe causare deadlock e che dovremmo usare async / await invece. Ma vedo molti esempi di codice in cui viene utilizzato. Va bene usarlo? Quali sono i casi in cui può essere bloccato? C’è qualcos’altro che dovrei usare, come Task.Wait ?

Come descritto nel mio blog, GetAwaiter().GetResult() può deadlock quando viene utilizzato in un contesto con un thread alla volta . Questo è più comunemente visto quando chiamato sul thread dell’interfaccia utente o in un contesto ASP.NET (per ASP.NET pre-core).

Wait ha gli stessi problemi. La correzione appropriata è quella di await e rendere il codice chiamante asincrono.

Nota che il metodo Main nelle app Console è un’eccezione a questa regola; è perfettamente appropriato da usare lì. Molti esempi di codice lo usano in questo modo.