В моем приложении (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;
}
}