DataContractSerializer в WinRT

#c# #windows-runtime #c#-5.0

#c# #windows-среда выполнения #c #-5.0

Вопрос:

Я практиковал WinRT API, но столкнулся с некоторыми проблемами, нужна ваша помощь.

Я хочу попробовать DataContractSerializer и сослаться на этот сайт:

http://winrtstoragehelper.codeplex.com/

Код:

 Stream inStream = Task.Run(() => readStream.OpenRead()).Resu<
  

Я думаю, это должно быть (ошибка?):

 Stream inStream = await Task.Run(() => readStream.OpenRead());
  

Но самое странное, что если я использую только:

 Stream inStream = readStream.OpenRead());
  

и я передаю этот поток в:

 DataContractSerializer.WriteObject
  

API застрянет навсегда.

Но если я использую:

 Stream inStream = await Task.Run(() => readStream.OpenRead());
  

И передайте этот поток в WriteObject , тогда он будет работать нормально.

Я понятия не имею, почему этот симптом возникает, только если я не использую Task.Run и await для потока.

Может ли кто-нибудь дать мне какой-нибудь совет или предложение?


Но

Поток inStream = ReadStream.Метод OpenRead() не был назван «асинхронным»

Я не знаю, почему мне нужно специально создавать Task для этого.

Спасибо.

Ответ №1:

Ответ содержится в описании проекта:

«ObjectStorageHelper — это универсальный класс, который упрощает хранение данных в приложениях WinRT, при этом все еще сохраняя принципы асинхронности * приложений в стиле Metro».

Все операции с файлами / вводом-выводом в WinRT по своей природе асинхронны, отсюда необходимость использовать методы, которые также являются асинхронными (по крайней мере, для получения какого-либо результата). Новое ключевое слово «await» является одним из способов достижения этой цели, хотя вы также могли бы явно назначить функцию обратного вызова для обработки завершения асинхронной операции.