私のアプリ (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;
}
}