0

我正在使用这段代码,但遇到了一些关于使用 async 和 await 的问题。我之前制作了一个关闭“项目”的方法,我将它与异步委托异步使用,效果很好。我还创建了deserializeAsync()一种在其他情况下使用的方法,也可以像宣传的那样工作。但是,我现在想为我的应用程序实现一个开放项目功能。我开始使用我在其他委托中使用过的 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 回答