我正在使用这段代码,我遇到了一些关于使用async和await的问题。我之前已经创建了一个关闭“项目”的方法,并且我将它与异步Delegate异步使用,它非常有用。我还创建了一个deserializeAsync()
方法,用于其他情况,也可以像宣传的那样工作。但是,我现在想为我的应用程序实现一个Open Project功能。我开始用我在其他委托中使用的Async帮助器方法编写方法,但我意识到当我需要通过文件浏览对话框提示用户输入信息时,我不知道这是否是一个好的解决方案。显示文件浏览对话框将冻结方法的执行,我认为它不再是异步的。这里的最佳做法是什么?我应该.Wait()
这样的异步方法:
CloseProjectAsync().Wait();
然后让Open Project方法同步执行所有内容,或者我是否更好等待我所拥有的异步方法并使此方法“尽可能异步”?
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);
}
答案 0 :(得分:1)
我会做所有事情async
。模态对话有点不稳定;它们实际上在阻塞调用中执行嵌套的消息循环。这可以使您的UI和其他异步操作保持响应,但可能会导致重新入侵问题。但它比Wait
更好。
如果您尝试使用Wait
,则会很快遇到deadlock problem I describe on my blog。