- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是在尝试使用 WinRT,我正在创建的一个演示应用程序是一个基本的“记事本”风格的应用程序,它可以加载/保存到本地存储。虽然我熟悉构建 WinRT 应用程序的正确async
方法,但我的演示应用程序使用同步Load
来简化操作。
问题是,当调用 Load
时,它会工作 3 次中的 2 次,其余时间应用程序挂起调用 var result = await FileIO。 ReadTextAsync(存储文件);
public class ContentStorage : IContentStorage
{
private const string FileName = "contents.txt";
public string Load()
{
return LoadAsync().Result;
}
public void Save(string content)
{
SaveAsync(content);
}
private static async Task<string> LoadAsync()
{
var storageFile = await LocalFolder.GetFileAsync(FileName);
var result = await FileIO.ReadTextAsync(storageFile);
return result;
}
private static async void SaveAsync(string content)
{
var storageFile = await LocalFolder.CreateFileAsync(FileName, CreationCollisionOption.ReplaceExisting);
FileIO.WriteTextAsync(storageFile, content);
}
private static StorageFolder LocalFolder
{
get { return ApplicationData.Current.LocalFolder; }
}
}
我是不是在做一些非常愚蠢的事情?
FWIW,我尝试将 Load
更改为明确地阻止每一步,这将挂起率提高到 20 分之一,但我仍然不明白为什么它会挂起...
public string Load()
{
var storageFile = LocalFolder.GetFileAsync(FileName).AsTask().Result;
var result = FileIO.ReadTextAsync(storageFile).AsTask().Result;
return result;
}
最佳答案
Whilst I'm familiar with the proper
async
approach for building WinRT apps, my demo app is using a synchronousLoad
to keep things simple.
不是真的。将同步代码与异步代码混合在一起非常复杂。在任何地方都使用 async
要简单得多。
当 async
方法在等待任务后继续执行时,默认情况下它将返回到其原始上下文。 (我在 async
/await
blog post 中对此进行了更详细的介绍)。一些上下文(例如 UI 上下文)只允许一个线程;如果该线程被阻塞(例如,在 Task.Result
上),则 async
方法无法进入该上下文以完成其执行。这会导致死锁。
更多信息:
async
/await
FAQ有很多关于上下文捕获和恢复的细节。这个死锁非常有名,微软已经对其进行了演示:
关于c# - FileIO.ReadTextAsync 偶尔挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10700570/
我只是在尝试使用 WinRT,我正在创建的一个演示应用程序是一个基本的“记事本”风格的应用程序,它可以加载/保存到本地存储。虽然我熟悉构建 WinRT 应用程序的正确async 方法,但我的演示应用程
我只是在尝试使用 WinRT,我正在创建的一个演示应用程序是一个基本的“记事本”风格的应用程序,它可以加载/保存到本地存储。虽然我熟悉构建 WinRT 应用程序的正确async 方法,但我的演示应用程
尝试使用 读取 locl 文本文件时出现以下异常 var text = await FileIO.ReadTextAsync(file); The handle with which this opl
我想在我的 javascript 编写的 Windows 商店应用程序中读取 CSV 文件。如果我使用 readTextAsync,我会在使用某些德语变音符号时收到错误消息。 No mapping f
基本上,我的代码是一个非常简单的测试,用于在 Windows 8 风格的应用程序中写入和读取文件。这里,首先将字符串“Jessie”写入dataFile.txt,然后由程序读取,从而更新xaml中Te
我是一名优秀的程序员,十分优秀!