私は WinRT を試しているところです。私が作成しているデモ アプリの 1 つは、ローカル ストレージにロード/保存する基本的な「メモ帳」スタイルのアプリです。私は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 分の 1 に改善されましたが、なぜハングしているのかはまだわかりません...
public string Load()
{
var storageFile = LocalFolder.GetFileAsync(FileName).AsTask().Result;
var result = FileIO.ReadTextAsync(storageFile).AsTask().Result;
return result;
}