我为Windows应用商店应用程序(又称Metro)提供了一个简单的实用程序集合,但我发现它在连续调用ApplicationData.Current.LocalFolder.GetFileAsync
时似乎挂起了(即只要我尝试调试它并逐步解决,问题就消失了。)
public static async Task<LocalCache<T>> LoadCache()
{
try
{
// Get the input stream for the cache
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(GetFileNameForType());
using (IInputStream inStream = await file.OpenSequentialReadAsync())
{
// Deserialize the cache
DataContractSerializer serializer = new DataContractSerializer(typeof(LocalCache<T>));
return (LocalCache<T>)serializer.ReadObject(inStream.AsStreamForRead());
}
}
catch (FileNotFoundException)
{
return new LocalCache<T>();
}
}
指定打开文件的模式似乎没有任何重载,并且它似乎没有返回,这让我有点难过。我能做些什么来防止这种僵局?
答案 0 :(得分:4)
最可能的原因是你的调用堆栈越来越多;我猜可能会调用Wait
或Result
。这will result in deadlock(如我的博客所述)。
如果你因为这是初始化或构造函数的一部分而阻塞,那么你可能会对asynchronous lazy initialization感兴趣(我的博客上也有描述)。