WinRT中的DataContractSerializer

use*_*477 6 c# c#-5.0 windows-runtime

我正在练习WinRT API,但遇到一些需要你帮助的问题.

我想试试DataContractSerializer并引用这个网站:

http://winrtstoragehelper.codeplex.com/

代码:

Stream inStream = Task.Run(() => readStream.OpenRead()).Result;
Run Code Online (Sandbox Code Playgroud)

我认为应该是(bug?):

Stream inStream = await Task.Run(() => readStream.OpenRead());
Run Code Online (Sandbox Code Playgroud)

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

Stream inStream = readStream.OpenRead());
Run Code Online (Sandbox Code Playgroud)

我把这个流传递给:

DataContractSerializer.WriteObject
Run Code Online (Sandbox Code Playgroud)

API将永远停滞不前.

但如果我使用:

Stream inStream = await Task.Run(() => readStream.OpenRead());
Run Code Online (Sandbox Code Playgroud)

并将此流传递给WriteObject当时它将正常工作.

我不知道为什么只有在我不使用Task.Runawait流的情况下才会出现这种症状.

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


Stream inStream = readStream.OpenRead()方法没有被命名为"async"

我不知道为什么我需要有目的地创建任务来执行此操作.

谢谢.

Kir*_*iya 4

答案在项目描述中:

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

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