C# 在.NET4上使用异步等待

C# 在.NET4上使用异步等待,c#,.net-4.0,async-ctp,async-await,c#-5.0,C#,.net 4.0,Async Ctp,Async Await,C# 5.0,我现在开始创建一个应用程序,它将从C#5的异步等待特性中获益匪浅。但我不确定使用哪个版本的VS和异步运行时 看看操作系统的流行度图表,我需要再支持WindowsXP三年左右。看起来.NET4.5只在较新版本的Windows上运行,所以我需要以.NET4.0为目标。开发机器使用Windows7,因此使用更新版本的VS不是问题 现在我需要首先选择一个编译器来执行此操作: 带AsyncCTP的VS2010 VS2012预览版(到达后为最终版),将目标设置为.net 4.0 Mono(看起来2.12有

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

看看操作系统的流行度图表,我需要再支持WindowsXP三年左右。看起来.NET4.5只在较新版本的Windows上运行,所以我需要以.NET4.0为目标。开发机器使用Windows7,因此使用更新版本的VS不是问题

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

  • 带AsyncCTP的VS2010
  • VS2012预览版(到达后为最终版),将目标设置为.net 4.0
  • Mono(看起来2.12有异步等待,我更喜欢/习惯于VS而不是Mono开发为IDE)
哪一个代码生成错误更少?查看VS2012预览版时,使用了一个比CTP更强大的代码生成器

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

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

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

还是应该使用第三方实现?也许mono有一个

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


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

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

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


至于VS2012,据我记忆中,它也包含了MS在那次会议上给我的//Build/tablet中提供的相同的异步CTP。

如果你想发布你的软件,我认为Mono解决方案实际上是你现在唯一的选择。你还说,你希望最终的结果是在Linux和OS X上运行Mono。首先瞄准Mono似乎是自然的解决方案

下一个问题是IDE。MonoDevelop显然工作得很好,但您说您更喜欢VisualStudio

格雷格·赫尔曼(Greg Hurlman)在Visual Studio中编写了针对Mono 2.8的代码。如果你跟他一起跟进,他可能会为你指出在VisualStudio中开发Mono 2.11/2.12的正确方向

当然,还有一种是商业产品。我认为它仍然是由提供

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

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

下面是它在网页上的内容:

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


如果你愿意考虑其他.Net语言,F#可以解决你的问题。多年来,它一直使用异步{}计算表达式,甚至与.NET2.0向后兼容。最低要求是Windows XP SP3。可以下载运行时

使用VS 12 beta版可以使用异步/await以.NET 4.0为目标

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

细节

编辑:我们采用了这种技术,并将其转化为一个名为AsyncBridge的开源库:

微软发布了through作为AsyncCTP的替代品

您可以在此处阅读更多信息:

您可以在此处阅读以前的版本:

由于该软件包得到了官方支持,我现在认为针对XP+async的最佳选择是使用Visual Studio 2012+C#5+async目标软件包


如果您觉得有必要将.NET 3.5作为目标,您仍然可以使用(my)。

我认为CTP版本不会让您走得更远,因为您将不允许在商业应用程序中重新发布CTP的任何内容。肯定有错误潜伏在周围,它还没有优化性能。您可能会更快地开发它,但您的客户不会乐意安装可能会干扰最终发布版本的测试版软件。@Alois AsyncCTP的更高版本允许重新分发。最糟糕的是我的申请被破坏了。它不会干扰其他应用程序,所以我看不出你的演唱会对最终版本的干扰有多大。我的问题还有一部分是,是否会有一个最终版本首先支持WinXP。许可证明确声明(Async CTP 3)“1.a.ii.您同意在接到Microsoft通知后立即停止此类使用;”。我怀疑这个通知发布后会来自微软。我不是律师,但我相信你的法律部门(如果你有)会很乐意听到你的理由,你想如何在不违反许可条款的情况下解决这个问题。我不在乎等待VS2012发布。我希望VS2012在我的软件出alpha之前发布。但即使VS2012发布,我也不想把目标锁定在它上面