为了设计/重用可用于 WPF 应用程序、Windows Phone 8 应用程序和更高版本的 Windows 8 / RT 应用程序的库,我们需要进行一些 HttpWebRequest 调用,最好是同步调用,以免破坏现有应用程序。
问题是已经存在的代码使用 ManuelResetEvent 同步执行 Web 请求。它在 WPF 和 Win 8 RT 中完美运行,但在 Windows Phone 8 中(至少在模拟器上),程序挂起,如下所示:
WP7 上的 ManualResetEvent 和 HttpWebRequest
我尝试将调用封装在任务或线程中,但它仍然是相同的。
因此,我更改了代码以使用 async/await,它当然非常适合 WP8 和 Win 8,但我们的桌面应用程序针对的是 .NET 4.0 框架以实现 XP 兼容性。当然,有 Visual Studio 2012 的异步目标包,但它有两个问题:
- 桌面应用程序代码应该使用 async/await 重写/仔细测试
- Mono 的稳定版本不支持异步/等待(也许在 Windows 上使用异步目标包编译然后在 Mono 运行时运行可以工作?应该进行测试)
因此,我尝试同步调用异步标记方法,只是为了看看。我使用了这里给出的 AsyncHelpers :
如何同步运行异步 Task 方法?
它适用于 WPF 和 Windows 8 应用程序,但在 Windows Phone 8 上挂起。
有人知道如何拥有可以在任何地方使用而无需挂在 Windows Phone 上的同步代码(或具有等待/异步的同步外观代码)吗?
也许你云使用Result任务的属性。它适用于.NET 4.0/4.5 和 Windows Phone 8。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)