2012-09-30 120 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

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