C#_Task を Wait は NG

デッドロックするから。

デッドロック
互いが相手の作業を終わるのを待っていて、
どちらも身動きが取れなくなっている状況のこと。

 

ex )

    public void HogeNG( )
    {
        HogeAsyncNG( ).Wait( ); // 対応しない。死ぬ。
    }
   
    private async Task HogeAsyncNG( )
    {
        await Task.Delay(1000);
    }

 

Task が実行完了するまで廻り続ける while ループとかでも発生する。
Task<T>.Result プロパティの参照も Wait と同様なので死ぬ。

非同期メソッドは、await する内部タスクを開始した後
自分のスレッドを一旦解放する。
そしてその内部タスクが完了した時、
処理の続きを「前と同じスレッドで」実行する。

しかし、
前のスレッドを既に誰かが使っている
且つ
そのスレッドが解放されるためには、Task の実行が完了する必要がある
となるとデッドロックが発生する。

 

 

こちらから。
https://qiita.com/acple@github/items/8f63aacb13de9954c5da
http://wa3.i-3-i.info/word11317.html

 

以上。