2012-09-30 47 views
0

我有一个简单的工具集为Windows Store应用程序(又名地铁),但我发现,似乎只要我尝试调试它,并逐步完成,主叫陆续ApplicationData.Current.LocalFolder.GetFileAsync(即当挂问题消失)。什么会导致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>(); 
     } 
    } 

虽然目前没有出现任何超载指定的模式来打开该文件,它不会出现回归,这给我留下有点儿难住了。我能做些什么来防止这种僵局?

回答

4

最可能的原因是你的调用堆栈进一步上升;我猜测有可能拨打WaitResult。这will result in deadlock(如我的博客中所述)。

如果您阻止的,因为这是初始化或构造的一部分,那么你可能有兴趣在asynchronous lazy initialization(也是我的博客上描述)。

+0

工作像魅力:)谢谢男人 –