是否可以在除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?
这是编译器的一个特性。 没有支持async
和await
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);
它看起来并不好看,很可能标准的演变,新的和更好的(至少是标准的)方法将在未来的版本中出现。