0

私が作業しているこのコードがあり、async と await の使用に関するいくつかの質問に遭遇しました。私は以前に「プロジェクト」を閉じるためのメソッドを作成しましたが、それを非同期デリゲートと非同期で使用すると、うまく機能します。deserializeAsync()また、宣伝どおりに機能する他の状況で使用する方法も作成しました。ただし、アプリに Open Project 機能を実装したいと考えています。他のデリゲートで使用した Async ヘルパー メソッドを使用してメソッドの作成を開始しましたが、ファイル参照ダイアログでユーザーに情報を求める必要がある場合、これが適切な解決策であるかどうかわからないことに気付きました。ファイル参照ダイアログを表示すると、メソッドの実行がフリーズするため、非同期ではなくなったと思います。ここでのベストプラクティスは何ですか? するべきか.Wait()このような私の非同期メソッド:

CloseProjectAsync().Wait();

Open Project メソッドにすべてを同期的に実行させるだけですか、それとも私が持っている Async メソッドを待って、このメソッドを「可能な限り非同期」にする方がよいでしょうか?

private async Task OpenProjectAsync()
{
    //get folderPath
    if (m_OpenFileService.ShowDialog(null) != true)
       return;

    await CloseProjectAsync();

    await Task.Run(() => {
        string[] lines = File.ReadAllLines(m_OpenFileService.FileName);
    });

    await DeserializeAsync(something);
}
4

1 に答える 1

1

私はすべてを作りますasync。モーダル ダイアログは少し不安定です。実際には、ブロッキング呼び出し内でネストされたメッセージ ループを実行します。これにより、UI やその他の非同期操作の応答性が維持されますが、再入の問題が発生する可能性があります。しかし、それは よりも優れたオプションですWait

を使用しようとすると、ブログで説明しているデッドロックの問題にWaitすぐに遭遇します。

于 2013-03-05T14:41:35.883 に答える