137

我目前正在开始创建一个应用程序,该应用程序将从 C# 5 的 async-await 功能中获益良多。但我不确定要使用哪个版本的 VS 和异步运行时。

查看操作系统流行度图表,我需要再支持 Windows XP 三年左右。看起来 .net 4.5 只能在较新版本的 Windows 上运行,所以我需要以 .net 4.0 为目标。开发机器使用的是Windows 7,所以使用较新版本的VS是没有问题的。

现在我需要首先选择一个编译器来执行此操作:

  • VS2010 带 AsyncCTP
  • VS2012 预览版(以及最终版),将目标设置为 .net 4.0
  • Mono(看起来 2.12 有 async-await,我更喜欢/习惯于 VS 而不是 MonoDevelop 作为 IDE)

哪一个的代码生成错误更少?查看Jon Skeet 的博客,VS2012 预览版使用的代码生成器从未使用过 CTP。

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

VS2012 是否包含可重新分发的异步运行时以与 .net 4 一起使用?

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

还是我应该使用第三方实现?也许单声道有一个?

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

如果我的二进制文件可以在 mono+Linux/MacOS 上不做任何更改,我也会喜欢它。因此,运行时应该与任何内置的单声道(可能是 2.12)兼容,或者允许在非 Windows 操作系统上使用。

4

5 回答 5

106

Microsoft通过Nuget发布了Async Targeting Pack (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 + async 的最佳选择是使用 Visual Studio 2012 + C#5 + Async Targeting Pack。

如果您觉得需要以 .NET 3.5 为目标,您仍然可以使用(我的)AsyncBridge for .NET 3.5

于 2012-04-27T04:14:09.717 回答
24

如果您愿意考虑其他 .Net 语言,F# 可以解决您的问题。它多年来一直使用 async{} 计算表达式,并且即使与 .Net 2.0 也向后兼容。最低要求是 Windows XP SP3。运行时可以在这里下载。

于 2012-03-26T14:55:49.713 回答
4

可以使用 VS 12 beta 来使用 async/await 来定位 .NET 4.0。

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

详情在这里

编辑:我们采用了这种技术并将其变成了一个名为 AsyncBridge 的开源库: https ://nuget.org/packages/AsyncBridge

于 2012-04-09T10:40:04.623 回答
3

如果您希望能够分发您的软件,我认为 Mono 解决方案确实是您现在唯一的选择。您还说您希望最终结果在 Linux 和 OS X 上的 Mono 上运行。首先以 Mono 为目标似乎是自然的解决方案。

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

Greg Hurlman创建了一个配置文件来针对 Visual Studio 中的 Mono 2.8 进行编码。如果您跟进他,他可能会为您指出在 Visual Studio 中针对 Mono 2.11/2.12 进行开发的正确方向。

当然,还有用于 Visual Studio 的 Mono Tools,它是一个商业产品。我认为它仍然由Xamarin提供。

您也许还可以在 .NET 之上从 Mono 运行所需的 4.5 配置文件程序集,但我没有尝试过。4.5 配置文件是 4.0 API 的严格超集。也许试一试并报告。

编辑:看起来你现在可以在生产中使用 Visual Studio Async CTP

这是下载页面上的内容:

包括用于生产的新 EULA。注意 - 此许可不鼓励您将 CTP 用于您的生产代码。CTP 仍然是不受支持且使用风险自负的技术预览。但是,我们收到了许多开发人员要求将 CTP 用于生产代码的请求,因此我们更改了许可证以允许这样做。

于 2012-02-08T07:59:28.553 回答
2

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

如果你想在你的应用程序中引入简单的异步操作,我建议你使用 Reactive Extensions 和构建在上面的东西(Reactive UI 等),这很漂亮。

至于 VS2012,据我记得,它还包含与我在//Build/tablet MS 在那次会议上给我的相同的异步 CTP。

于 2012-02-06T11:09:36.450 回答