ありがとうございます。ググってみました。

非同期処理の結果を受け取るために、Result ばっかり使用していたのですが、デッドロックするという情報を見て脳死してました。

・戻り値が欲しい場合は呼び出し元の同期メソッドで、GetAwaiter(false).GetResult();
・非同期メソッド内で処理完結させたい場合は、GetAwaiter(false).OnCompleted();
・同期メソッド内で非同期処理を完結させたい場合は、Task.Run();
をすればとりあえず大丈夫そう?という感じみたいなので、これをベースに考えてみます。

今勉強で作ってるのが WinForms アプリですが、多くの処理の起点が戻り値 void のイベントハンドラで、
GetAwaiter(false) にすれば、空いてるスレッド使うことでデッドロックのリスクも下がる(なくなる?)みたいなので、試行錯誤してみます。