.GetAwaiter().GetResult();
がデッドロックを引き起こす可能性があり、代わりにasync
/await
を使用する必要があることをいくつかの場所で読みました。しかし、私はこれが使用されている多くのコードサンプルを見ています。使用しても大丈夫ですか?デッドロックが発生する可能性があるケースはどれですか? Task.Wait
など、他に使用すべきものはありますか?
ブログで説明しているように、 GetAwaiter().GetResult()
は、一度に1スレッドのコンテキストで使用するとデッドロックする可能性があります 。これは、UIスレッドまたはASP.NETコンテキスト(コアCore ASP.NETの場合)で呼び出されたときに最もよく見られます。
Wait
にも同じ問題があります。適切な修正は、await
を使用し、呼び出しコードを非同期にすることです。
コンソールアプリのMain
メソッドは、このルールの例外であることに注意してください。そこで使用するのが完全に適切です。多くのコードサンプルがこの方法で使用します。