Serialization 仅在高使用率DataContractSerializer期间发生XmlException

Serialization 仅在高使用率DataContractSerializer期间发生XmlException,serialization,windows-8,async-await,Serialization,Windows 8,Async Await,我有一个使用DataContractSerializer的windows 8缓存解决方案,只有在“快速”使用UI时才会引发XmlException意外的文件结尾 public static class CachingData<T> { public static async void Save(T data, string filename, StorageFolder folder = null) { folder = folder ?? Appli

我有一个使用DataContractSerializer的windows 8缓存解决方案,只有在“快速”使用UI时才会引发XmlException意外的文件结尾

public static class CachingData<T>
{
    public static async void Save(T data, string filename, StorageFolder folder = null)
    {
        folder = folder ?? ApplicationData.Current.LocalFolder;
        try
        {
            StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
            using (IRandomAccessStream raStream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                using (IOutputStream outStream = raStream.GetOutputStreamAt(0))
                {
                    DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                    serializer.WriteObject(outStream.AsStreamForWrite(), data);
                    await outStream.FlushAsync();
                }
            }
        }
        catch (Exception exc)
        {
            throw exc;
        }
    }

    public static async System.Threading.Tasks.Task<T> Load(string filename, StorageFolder folder = null)
    {
        folder = folder ?? ApplicationData.Current.LocalFolder;
        T data = default(T);
        StorageFile file = await folder.GetFileAsync(filename);
        using (IInputStream inStream = await file.OpenSequentialReadAsync())
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(T));
            data = (T)serializer.ReadObject(inStream.AsStreamForRead());
        }
        return data;
    }
}
e、 g.用户单击列表CachingData中的项。加载通过等待调用异步,检查FileNotEoundException并从磁盘或网络加载数据,完成后序列化。 在第一次加载后,用户选择列表中的另一项并重复循环

当首次加载后变为“不等待加载”且选定的项不可用时,会发生此问题


不太确定如何继续,甚至不知道如何调试,希望只要忽略就可以让应用程序继续运行,而不必增加缓存的速度

在负载周围添加一个try-catch,吞下XmlException不会破坏应用程序,但我仍然很想知道发生了什么,这是一个异步问题吗?您是否也可以发布调用Load的代码,并指定引发异常的行?FWIW,“async void”通常只在事件处理程序中使用-“async Task”允许调用方等待它们。异常堆栈跟踪是什么?如果在调用Load/Save(加载/保存)后等待(以失败的为准),行为是否有任何变化?目前我无法复制该问题,这是因为我重新启动了运行Windows 8的VM。我会把这个打开,以防它回来。