C# 在异步方法中提示用户输入信息

C# 在异步方法中提示用户输入信息,c#,asynchronous,C#,Asynchronous,我正在处理这段代码,遇到了一些关于使用async和await的问题。我以前做过一个关闭“项目”的方法,我将它与异步委托异步使用,效果非常好。我还创建了一个反序列化async()方法,用于在其他情况下使用,该方法也可以像广告中那样工作。但是,我现在想为我的应用程序实现一个开放项目功能。我开始编写这个方法时使用了我在其他委托中使用过的异步助手方法,但我意识到,当我需要通过文件浏览对话框提示用户输入信息时,我不知道这是否是一个好的解决方案。显示文件浏览对话框将冻结该方法的执行,因此我认为它不再是异步的

我正在处理这段代码,遇到了一些关于使用async和await的问题。我以前做过一个关闭“项目”的方法,我将它与异步委托异步使用,效果非常好。我还创建了一个
反序列化async()
方法,用于在其他情况下使用,该方法也可以像广告中那样工作。但是,我现在想为我的应用程序实现一个开放项目功能。我开始编写这个方法时使用了我在其他委托中使用过的异步助手方法,但我意识到,当我需要通过文件浏览对话框提示用户输入信息时,我不知道这是否是一个好的解决方案。显示文件浏览对话框将冻结该方法的执行,因此我认为它不再是异步的。这里最好的做法是什么?我应该
.Wait()
我的异步方法如下:

CloseProjectAsync().Wait();
让openproject方法同步执行所有内容,或者我会更好地等待我拥有的异步方法,并使这个方法“尽可能异步”吗

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);
}

我会使一切
异步
。模态对话框有点不稳定;它们实际上在阻塞调用中执行嵌套的消息循环。这使您的UI和其他异步操作保持响应,但可能会导致重入问题。但这是一个比等待更好的选择


如果您尝试使用
Wait
,您将很快遇到。

有一些文件IO方法已经是异步的,您不需要(也不应该)启动新的线程池线程并为文件IO运行阻塞IO方法。