私のアプリ(Windows 8 Metro)では、いくつかのオブジェクトをローカルフォルダにシリアル化された形式で格納します。それから読む方法(以下を参照)があります。この方法でラインA(readObjectメソッド)に -逆シリアル化と非同期/待機
var entity= Task.Run<Entity>(() => GetASync<Entity>(file)).Result;
が、私はのawaitキーワードを使用している場合、それは働いていない:
私はTask.Runでこのメソッドを呼び出すと、私は、オブジェクトを取得することができますスレッドが停止し、エラーまたは例外なしで終了:それはお勧めしますよう
var entity= await GetASync<Entity>(file);
は、たぶん私はのawait /非同期使用していませんか?
方法
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
svick、そうです – MatthieuGD
回避策は 'var entity = Wait Task.Run(()=> GetASync (file));' '非同期コードで' Result'にアクセスしたくない場合、別の方法でエラーを処理するためです。 –