質問: new AccountCreatorViewModel(); public AccountCreator() { InitializeComponent(); _vm.ReadAsync().ConfigureAwait(false).GetAwaiter().GetResult(); } } ``` `ConfigureAwait(false)`によってUIスレッドに戻さないようにしてもだめなようです。 ユーザーによるボタン操作等ではなく、コントロールやウィンドウの初期化時に非同期処理をデッドロックさせずに待つ方法はありますか? 追記: この質問に至った背景 アプリケーションを起動した際に、GoogleスプレッドシートAPIを使用してスプレッドシートの内容を読み込みます。 ネットワークの通信を行うため、その処理は非同期にしてあります。 通信にそこまでの時間はかかりませんが、ユーザーがボタン等を操作しなくても通信処理は走っていてほしいため、このような質問をしました。
回答: 呼び出し側で ConfigureAwait(false) を付与しても意味が無いのでは? ReadAsync() の中はどうなっているのでしょう? たぶんその中で await を使っているのではないかと思いますが、であれば、そこで ConfigureAwait(false) を使うべきと思います。以下のようにできるのであればそれで試してみたはいかがですか? !画像の説明をここに入力 ちなみに、上の画像の TimeCosumingMethod メソッドのコメントアウトした方のコードではデッドロックになります。