我只是在试验 WinRT,我正在创建的一个演示应用程序是一个基本的“记事本”风格的应用程序,它可以加载/保存到本地存储。虽然我熟悉async
构建 WinRT 应用程序的正确方法,但我的演示应用程序使用同步Load
来保持简单。
问题是,当拨打电话时Load
,它在 3 次中有 2 次有效,其余时间应用程序挂在通话中var result = await FileIO.ReadTextAsync(storageFile);
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;
}