FileIO.ReadTextAsync czasami zawiesza się
Po prostu eksperymentuję z WinRT, a jedna tworzona przeze mnie aplikacja demo jest podstawową aplikacją w stylu „notatnika”, która ładuje / zapisuje do lokalnej pamięci. Chociaż dobrze znam właściwyasync
podejście do budowania aplikacji WinRT, moja aplikacja demo używa synchronicznegoLoad
aby zachować prostotę.
Problem polega na tym, że podczas rozmowy telefonicznejLoad
, działa 2 z 3 razy i przez resztę czasu aplikacja zawiesza się na połączeniuvar 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; }
}
}
Czy robię tu coś wyjątkowo głupiego?
FWIW, eksperymentowałem ze zmianąLoad
po prostu jawnie zablokować na każdym kroku, a to poprawia zawieszenie na 1 na 20, ale wciąż nie rozumiem, dlaczego w ogóle się zawiesza ...
public string Load()
{
var storageFile = LocalFolder.GetFileAsync(FileName).AsTask().Result;
var result = FileIO.ReadTextAsync(storageFile).AsTask().Result;
return result;
}