在.net 4上使用异步等待

我目前正在开始创建一个应用程序,它将从 C # 5的异步等待特性中获益匪浅。但是我不确定使用哪个版本的 VS 和异步运行时。

看看操作系统的受欢迎程度图表,我还需要再支持 WindowsXP 三年左右。看起来。Net 4.5只能在新版本的 Windows 上运行,所以我需要。净值4.0。开发机器使用 Windows7,因此使用新版本的 VS 不成问题。

现在我需要首先选择一个编译器来完成这项工作:

  • 使用 AsyncCTP 的 VS2010
  • VS2012预览版(到达后最终版) ,将目标设置为.net 4.0
  • Mono (看起来2.12有异步等待,我更喜欢/am 而不是 VS 作为 IDE)

哪一个有更少的代码生成错误? 看看 Jon Skeet 的博客的 VS2012预览版使用从来没有代码生成器比 CTP。

更重要的是要使用哪个运行时?

VS2012是否包含用于.net 4的可再发行异步运行时?

我设法通过引用 AsyncCTP 运行时来编译代码,并进行了预览。但是由于 CTP 有奇怪的许可条件,这看起来不像是一个好的长期解决方案。

或者我应该使用第三方实现? 也许 mono 有一个?

对于发布库,我更喜欢简单地将 dll 放在与应用程序相同的目录中,而不是某种安装程序。

我也希望我的二进制文件能够在 mono + Linux/MacOS 上工作而不需要更改。因此,运行时应该与内置的 mono (可能是2.12)兼容,或者允许在非 Windows 操作系统上使用。

67389 次浏览

如果您想在 MS 发布 C # 5.0之后开始发布您的软件,那么您可以开始使用 AsycnCTP 进行开发。 否则我不会建议你使用它,因为它只是 CTP,甚至不是一个测试版。它可以在接近测试阶段和发布阶段的时候进行更改。它可能是不稳定的,等等。

如果你想在你的应用程序中引入简单的异步操作,我建议你使用反应扩展和构建在上面的东西(反应用户界面等) ,它非常漂亮。

至于 VS2012,它也包含同样的异步 CTP,就我记忆所及,从我的//Build/平板电脑 MS 在那次会议上给我。

如果您希望能够分发您的软件,我认为 Mono 解决方案实际上是您现在唯一的选择。您还说,您希望最终结果运行在 Linux 和 OS X 上的 Mono 上。

您的下一个问题是 IDE。 MonoDevelopment 显然可以很好地工作,但是您说您更喜欢 VisualStudio。

Greg Hurlman 创建了一个侧写编写针对 Visual Studio Mono 2.8的代码。如果您跟踪他,他可能会为您指明在 Visual Studio 中针对 Mono 2.11/2.12进行开发的正确方向。

当然,也有 用于 VisualStudio 的 Mono 工具,这是一个商业产品。我假设它仍然是由 Xamarin提供。

您也可以从 Mono 上运行所需的4.5配置文件程序集。但我还没有尝试。4.5概要文件是4.0 API 的一个严格的超集。也许你可以试试,然后回来报告。

编辑: 看起来您现在可以在生产环境中使用 VisualStudio 异步 CTP 了

下载页上是这么写的:

包括一个新的 EULA 生产使用。注意-本许可证不 鼓励您使用 CTP 进行生产 CTP 仍然是一个不受支持的,使用风险自负的 技术预览。然而,我们已经收到了许多来自 开发人员使用 CTP 作为生产代码,因此改变了 允许这样做的许可证。

如果你愿意考虑其他。网络语言,F # 可以解决你的问题。它具有异步{}计算表达式已有多年,甚至向后兼容。净值2.0。最低要求是 WindowsXPSP3。可以下载运行库 给你

可以使用异步/等待来使用 VS 12 beta 来瞄准.NET 4.0。

您需要将一些代码复制到提供编译器所依赖的类型的项目中。

详情 给你

编辑: 我们采用了这种技术,并将其转换为一个名为 AsyncBridge 的开放源码库: Https://nuget.org/packages/asyncbridge

Microsoft 通过 Nuget发布了 异步定位包(Microsoft.Bcl.Async)作为 AsyncCTP 的替代品。

你可以在这里了解更多: http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx

你可以在这里阅读以前的版本: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx

由于这个包是官方支持的,我现在认为针对 XP + 异步的最佳选择是使用 Visual Studio 2012 + C # 5 + 异步目标包。

如果你觉得需要瞄准.NET 3.5,你仍然可以使用(我的) 支持.NET 3.5的 AsyncBridge