c# - 异步方法在调用时不会返回

标签 c# asynchronous file-io windows-phone-8.1 win-universal-app

我在这方面遇到了麻烦。我正在尝试制作一个异步方法,将本地文件的内容作为字符串返回。这是我的方法:

private static async Task<string> ReadContentsAsString(string fileName)
{
    var uri = new Uri(string.Format(@"ms-appx:///{0}", fileName));
    var file = await StorageFile.GetFileFromApplicationUriAsync(uri).AsTask().ConfigureAwait(false);
    var stream = await file.OpenStreamForReadAsync().ConfigureAwait(false);

    using (var streamReader = new StreamReader(stream))
    {                
        return await streamReader.ReadToEndAsync();
    }
 }

不幸的是,在执行到我的方法结束后,应用程序会永远等待。它完全挂起。它在最开始被调用,当启动画面仍然显示时(Windows Phone 8.1)

我错过了什么?

最佳答案

我怀疑在您的调用堆栈的更上方,您的代码调用了 Task.WaitTask<T>.Result .这可能会导致 deadlock that I describe on my blog .

总而言之,当 await用于任务,默认情况下它将捕获当前“上下文”并使用该上下文恢复 async方法。在这种情况下,上下文是 UI 上下文,它与单个 UI 线程相关联。如果代码更上层,调用堆栈正在调用 WaitResult ,然后它会阻塞 UI 线程,从而阻止 async整理方法。

关于c# - 异步方法在调用时不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089740/

相关文章:

c# - 如何以编程方式设置 DataGridView 中的单元格值?

android - Kotlin:元素未附加在列表中

javascript - 异步获取不可预测的 block 大小的最小行数

C fopen调用变量名?

c - c 中的 UDP : Extra characters getting added to file when saving received data in chunks

file-io - 如何使用ant脚本从文件中逐行读取数据?

c# - 将大量方法重载转换为通用方法,设计问题

c# - 文件传输占用大量 CPU

c# - 如何在 System.Net.WebSockets 中的 ClientWebSocket 上设置 ClientWebSocketOptions

c# - foreach 循环中的异步调用