除了C#之外,async await还能在其他.NET语言中使用吗

本文关键字:语言 NET 其他 之外 async await 除了 | 更新日期: 2023-09-27 18:29:34

异步等待模式是对.NET 4.5和C#5.0 更强大的补充之一

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

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

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

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

请注意,我问的不是一般的异步编程,而是异步等待模式(异步代码,以同步编写)的细节。

除了C#之外,async await还能在其他.NET语言中使用吗

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

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

C++确实通过task/then在Windows应用商店中支持一些异步,尽管它不如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,这是任何语言都可以实现的另一个编译器功能。

您可以查看Visual C++编译器2013年11月的CTP,其中有一些很好的例子可以做以下事情:__等待FileIO::WriteTextAsync(文件,文件->名称);

它看起来还没有那么好,而且很可能在未来的版本中会出现标准不断发展、新的、更好的(至少是标准的)方法。