【发布时间】:2011-03-31 10:54:25
【问题描述】:
我想知道新的 c++ 功能 std::async 是否与两个 C# 关键字 async/await 相当,如果不是,为什么?
【问题讨论】:
标签: c# c++ asynchronous async-await
我想知道新的 c++ 功能 std::async 是否与两个 C# 关键字 async/await 相当,如果不是,为什么?
【问题讨论】:
标签: c# c++ asynchronous async-await
并非如此,假设我正确阅读了this std::async documentation。
C# 5 的 async/await 特性涉及异步方法的复杂编译器转换,因此您可以编写看起来非常同步但具有异步点的代码。编译器为您构建状态机,创建适当的回调等。
编辑:虽然我之前认为std::async 只是强制你显式地传入回调,但它看起来比这更原始。无论哪种方式,我相信它主要/完全是 library 功能,而 C# 5 的异步方法主要是具有库支持的 language 功能。
编辑:正如 cmets 中进一步指出的那样,looks like it's on its way for VC++...
【讨论】:
std::async 没有延续或完成回调。您所能做的就是在等待它完成时阻止。与 TPL 相比,它非常原始。
await 的比较。我怀疑它不是完全等效的,这并不是说它没有用。
await 功能的精确语法可以在 Stackful Coroutines 的帮助下进行模拟:await_emu
CPPASYNC(在另一个答案中提供)看起来像您正在寻找的东西。 “异步”部分很简单,性能看起来不错(可能比 C# 实现更好)。
这是丑陋的 b/c,您需要围绕异步回调调用的特殊“等待”包装器。提供了一些 Boost 网络,它们很容易制作,但你不能只是“等待”任何东西:
异步任何方法/函数,
在异步函数中,等待:
- 一个异步函数
- 围绕异步函数(需要回调)的等待包装器(制作简单)
【讨论】: