C# 什么会导致GetFileAsync挂起?
我有一个用于Windows应用商店应用程序(也称为Metro)的简单实用程序集合,但我发现在连续调用C# 什么会导致GetFileAsync挂起?,c#,windows-8,microsoft-metro,C#,Windows 8,Microsoft Metro,我有一个用于Windows应用商店应用程序(也称为Metro)的简单实用程序集合,但我发现在连续调用ApplicationData.Current.LocalFolder.GetFileAsync时,它似乎挂起了(即,只要我试着调试它并逐步执行,问题就会消失) 公共静态异步任务LoadCache() { 尝试 { //获取缓存的输入流 StorageFile file=wait ApplicationData.Current.LocalFolder.GetFileAsync(GetFileNam
ApplicationData.Current.LocalFolder.GetFileAsync
时,它似乎挂起了(即,只要我试着调试它并逐步执行,问题就会消失)
公共静态异步任务LoadCache()
{
尝试
{
//获取缓存的输入流
StorageFile file=wait ApplicationData.Current.LocalFolder.GetFileAsync(GetFileNameForType());
使用(IInputStream inStream=wait file.OpenSequentialReadAsync())
{
//反序列化缓存
DataContractSerializer serializer=新的DataContractSerializer(typeof(LocalCache));
return(LocalCache)serializer.ReadObject(inStream.AsStreamForRead());
}
}
捕获(FileNotFoundException)
{
返回新的LocalCache();
}
}
似乎没有任何重载来指定打开文件的模式,也没有返回,这让我有点困惑。我能做些什么来防止这种死锁?最有可能的原因是您的调用堆栈越高;我猜可能会调用
等待
或结果
。这(如我的博客所述)
如果因为这是初始化或构造函数的一部分而阻塞,那么您可能会感兴趣(在我的博客中也有介绍)。最可能的原因是调用堆栈的进一步升级;我猜可能会调用
等待
或结果
。这(如我的博客所述)
如果因为这是初始化或构造函数的一部分而阻塞,那么您可能会对(在我的博客中也有描述)感兴趣
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>();
}
}