#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» является одним из способов достижения этой цели, хотя вы также могли бы явно назначить функцию обратного вызова для обработки завершения асинхронной операции.