async-await模式是.NET 4.5和C#5.0
的更强大功能之一据我所知,它目前仅在C#和VB中可用。
此API是.NET CLR还是C#编译器本身的功能?
我真正要问的是 - 我们是否应该期望在其他.NET语言中使用async / await,例如:
请注意我一般不会询问异步编程,而是关于async-await模式的细节(异步编码同步)。
答案 0 :(得分:6)
此API是.NET CLR还是C#编译器本身的功能?
这是编译器的一个功能。支持async
和await
不需要进行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);
它看起来并不好看,很可能标准的演变,新的和更好的(至少标准的)方法将在未来的版本中出现。