C# 什么会导致GetFileAsync挂起?

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

我有一个用于Windows应用商店应用程序(也称为Metro)的简单实用程序集合,但我发现在连续调用
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>();
        }
    }