在.net 4上使用asynchronous等待

我正在开始创build一个应用程序,它将从C#5的asynchronous等待function中获益。 但是我不确定要使用哪个版本的VS和asynchronous运行时。

看看OSstream行榜,我需要再支持Windows XP三年左右。 它看起来像.net 4.5只运行在较新版本的Windows,所以我需要的目标.net 4.0。 开发机器使用Windows 7,所以使用更新版本的VS不是问题。

现在我需要先select一个编译器来做到这一点:

  • VS2010与AsyncCTP
  • VS2012预览(最后一次到达),将目标设置为.net 4.0
  • 单声道(看起来像2.12有asynchronous等待,我更喜欢/用于作为IDE的MonoDevelop VS)

哪一个有更less的代码漏洞? 看看Jon Skeet的博客 ,VS2012 Preview使用了一个比CTP更好的代码生成器。

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

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

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

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

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

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

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 +asynchronous的最佳select是使用Visual Studio 2012 + C#5 +asynchronous定位包。

如果您觉得需要定位.NET 3.5,您仍然可以使用(我的) AsyncBridge for .NET 3.5 。

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

如果您希望能够分发您的软件,我认为Mono解决scheme现在是您唯一的select。 你也可以说你希望最终的结果能够在Mono上运行在Linux和OS X上。将Mono作为开始看起来就像是自然的解决scheme。

您的下一个问题是IDE。 MonoDevelop显然工作,但你说你更喜欢Visual Studio。

Greg Hurlman 创build了一个configuration文件来从Visual Studio对Mono 2.8进行编码。 如果你跟进他,他可能会指出你正确的方向在Visual Studio开发反对单声道2.11 / 2.12。

当然,也有商业产品的Visual Studio的Mono Tools 。 我认为它仍然由Xamarin提供。

你也许可以在.NET之上运行Mono所需的4.5个configuration文件程序集,但是我没有尝试过。 4.5configuration文件是4.0 API的一个严格的超集。 也许给它一个镜头,并报告回来。

编辑:它看起来也许你可以在生产现在使用Visual StudioasynchronousCTP

以下是它在下载页面上说的内容 :

包括用于生产的新EULA。 注 – 此许可证不构成对您的产品代码使用CTP的鼓励。 CTP仍然是一个不受支持和使用自有风险的技术预览版。 但是,我们收到了许多开发者使用CTP生产代码的请求,因此更改了许可证以允许这样做。

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

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

详情在这里

编辑:我们已经采取了这种技术,并把它变成一个名为AsyncBridge的开源库: https ://nuget.org/packages/AsyncBridge

如果您想在MS发布C#5.0之后开始分发您的软件,那么您可以使用AsycnCTP开始开发。 否则,我不会推荐你使用它,因为它只是CTP,甚至不是testing版。 它可以改变很多接近testing阶段和发布。 可能不稳定等等

如果你想在你的应用程序中引入简单的asynchronous操作,我会build议你使用Reactive Extensions和顶层构build的东西(Reactive UI等),这只是一种美化。

至于VS2012,它还包含相同的asynchronousCTP,据我记得从我的build设/平板电脑MS给了我在那个会议上。