6

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)

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

4

4 回答 4

7

这个 API 是 .NET CLR 还是 C# 编译器本身的特性?

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

C++ 确实通过/支持Windows Store 应用程序中的一些异步,尽管它不如 C# 和 VB 中的/关键字有用。taskthenasyncawait

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

请注意,F# 也有async支持(比 C# 和 VB.Net 版本早了很多)。它与 C# 风格的异步支持不同,但相似(并启发了 C# 和 VB.Net 团队)。

于 2013-08-28T17:53:32.653 回答
2

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

于 2013-08-28T17:53:53.293 回答
1

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

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

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

于 2013-08-28T17:57:01.327 回答
0

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

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

于 2014-07-23T13:27:22.880 回答