是否可以在除C#之外的其他.NET语言中使用async-await?

async-await模式是.NET 4.5和C#5.0中更强大的补充之一

据我所知,它目前仅在C#和VB中可用。

此API是.NET CLR还是C#编译器本身的function?

我真正要问的是 – 我们是否应该期望在其他.NET语言中使用async / await,例如:

  • C ++(通过C ++ / CLI)
  • Python(通过IronPython)
  • PHP(通过Phalanger)
  • JavaScript(通过IronJS)

请注意我一般不会询问异步编程,而是关于async-await模式的细节(同步写入的异步代码)。

此API是.NET CLR还是C#编译器本身的function?

这是编译器的一个特性。 没有支持asyncawait CLR更改。 需要扩展其他语言以支持它。 没有什么能阻止编译器这样做,但必须在编译器和语言本身中进行更改。

C ++确实通过task / then支持Windowsapp store应用程序中的某些异步 ,尽管它不像C#和VB中的async / await关键字那样可用。

据我所知,它目前仅在C#和VB中可用

请注意,F#还具有async支持(比C#和VB.Net版本早一点)。 它与C#风格的异步支持不同,但类似(并激发了C#和VB.Net团队)。

C#和VB.Net编译器通过将原始方法转换为状态机来实现await模式。 这与F#异步/工作流模式的工作方式非常相似。 在针对CLR的任何语言中都可以进行这种类型的转换。

编译器的一个特性需要BCL支持。

例如,有一个NuGet包允许您通过添加语言支持利用的各种API(例如Task.GetAwaiter )从.NET 4.0中使用它。

它在概念上类似于yield return,这是任何语言可以想象实现的另一个编译器function。

您可以查看Visual C ++编译器2013年11月的CTP ,一些很好的示例来执行以下操作:__await FileIO :: WriteTextAsync(file,file-> Name);

它看起来并不好看,很可能标准的演变,新的和更好的(至少是标准的)方法将在未来的版本中出现。