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

时间:2013-08-28 17:51:25

标签: c# .net clr async-await

async-await模式是.NET 4.5和C#5.0

的更强大功能之一

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

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

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

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

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

4 个答案:

答案 0 :(得分:6)

  

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

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

C ++确实通过task / then支持某些asynchrony in Windows Store applications,但它不如C#和VB中的async / await关键字可用。< / p>

  

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

编译器的一项功能需要BCL支持。

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

它在概念上类似于yield return,这是任何语言都可以实现的另一种编译器功能。

答案 3 :(得分:0)

您可以查看Visual C++ Compiler November 2013 CTP,一些漂亮的示例来执行以下操作:     __await FileIO :: WriteTextAsync(file,file-&gt; Name);

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