6

我正在练习 WinRT API 但遇到一些问题需要您的帮助。

我想尝试DataContractSerializer并参考这个网站:

http://winrtstoragehelper.codeplex.com/

编码:

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

我认为应该是(错误?):

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

但最奇怪的是,如果我只使用:

Stream inStream = readStream.OpenRead());

我将此流传递到:

DataContractSerializer.WriteObject

API 将永远卡住。

但如果我使用:

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

并将此流传递到WriteObjectthen 它会正常工作。

我不知道为什么只有在我不使用Task.Runandawait时才会出现这种症状。

任何人都可以给我一些建议或建议吗?


Stream inStream = readStream.OpenRead() 方法未命名为“异步”

我不知道为什么我需要故意创建任务来执行此操作。

谢谢。

4

1 回答 1

4

答案在项目描述中:

“ObjectStorageHelper 是一个通用类,它简化了 WinRT 应用程序中的数据存储,同时仍保持Metro 风格应用程序的异步 *原则*。”

WinRT 中的所有文件/IO 操作本质上都是异步的,因此需要使用也是异步的方法(至少为了获得任何结果)。新的“await”关键字是实现此目的的一种方法,尽管您也可以显式分配一个回调函数来处理异步操作的完成。

于 2011-11-14T10:25:37.817 回答