在我的應用程序(Windows 8 Metro)中,我以序列化格式在本地文件夾中存儲了一些對象。這是讀回來的方法(見下文)。反序列化和異步/等待
如果我把這種方法用Task.Run,我可以得到對象:
var entity= Task.Run<Entity>(() => GetASync<Entity>(file)).Result;
,但如果我用的await關鍵字,它不工作 - 在該方法中A線(的readObject)的線程停止並退出,沒有錯誤或異常:
var entity= await GetASync<Entity>(file);
也許我不使用await/async,因爲它的建議?
的方法
private async Task<T> GetASync<T>(IStorageFile file) where T : class
{
try
{
if (file != null)
{
IRandomAccessStream readStream = await file.OpenAsync(FileAccessMode.Read);
IInputStream inputStream = readStream.GetInputStreamAt(0);
using (XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(inputStream.AsStream(), XmlDictionaryReaderQuotas.Max))
{
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
var entity = serializer.ReadObject(reader); //line A - here the problem
return entity as T;
}
}
else
{
return null;
}
}
catch (FileNotFoundException)
{
return null;
}
catch (Exception)
{
throw;
}
}
它是否適用於'file = null'的普通情況? – svick 2011-12-19 10:01:35
svick,yes的確如此 – MatthieuGD 2011-12-19 11:50:52
僅供參考,你的解決方法應該是'var entity = await Task.Run(()=> GetASync (file));' - 你不想在異步代碼中訪問Result,因爲它不同地處理錯誤。 –
2011-12-19 13:01:55