如何将WinRT异步任务集成到现有的同步库中?

djc*_*uch 1 windows asynchronous windows-8 windows-runtime

我们有一个长期建立的大型多平台代码库,目前正在移植到WinRT.我们面临的挑战之一是如何处理WinRT的异步风格.

例如,我们不确定如何处理WinRT的异步文件操作.不出所料,我们的代码库的API是同步的.一个典型的例子是我们的File :: Open函数,它试图打开一个文件并返回成功或失败.我们如何调用WinRT函数并保持函数的行为相同?

请注意,我们遗憾地受到遗留的限制:我们不能简单地将API更改为异步.

谢谢!

Mat*_*erg 6

我假设您希望重新实现库以支持WinRT应用程序,同时不会改变API的定义,以便现有应用程序保持兼容.

我认为如果在调用异步方法时不包含await关键字,则不会执行异步操作,它应该以同步方式执行.但是如果方法返回一个值(根据我的经验),它确实不起作用.

我一直在使用这段代码使文件操作同步:

IAsyncOperation<string> contentAsync = FileIO.ReadTextAsync(file);
contentAsync.AsTask().Wait();
string content = contentAsync.GetResults();
Run Code Online (Sandbox Code Playgroud)