什么可能导致GetFileAsync挂起?

时间:2012-09-30 16:36:02

标签: c# windows-8 microsoft-metro

我为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>();
        }
    }

指定打开文件的模式似乎没有任何重载,并且它似乎没有返回,这让我有点难过。我能做些什么来防止这种僵局?

1 个答案:

答案 0 :(得分:4)

最可能的原因是你的调用堆栈越来越多;我猜可能会调用WaitResult。这will result in deadlock(如我的博客所述)。

如果你因为这是初始化或构造函数的一部分而阻塞,那么你可能会对asynchronous lazy initialization感兴趣(我的博客上也有描述)。