【发布时间】:2011-12-21 15:51:28
【问题描述】:
在我的应用程序(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这种小事有用吗? -
仅供参考,您的解决方法应该是
var entity= await Task.Run<Entity>(() => GetASync<Entity>(file));- 您不想在异步代码中访问Result,因为它处理错误的方式不同。
标签: c# windows-8 async-ctp async-await