Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C++;C中的std::async与async/await# 我想知道新的C++特性 STD::AsYNC/是否相当于两个C关键字Asic/Ac/At或No?如果不是,为什么?_C#_C++_Asynchronous_Async Await - Fatal编程技术网

C# C++;C中的std::async与async/await# 我想知道新的C++特性 STD::AsYNC/是否相当于两个C关键字Asic/Ac/At或No?如果不是,为什么?

C# C++;C中的std::async与async/await# 我想知道新的C++特性 STD::AsYNC/是否相当于两个C关键字Asic/Ac/At或No?如果不是,为什么?,c#,c++,asynchronous,async-await,C#,C++,Asynchronous,Async Await,C#5的async/await特性涉及异步方法的复杂编译器转换,因此您可以编写看起来非常同步但具有异步点的代码。编译器为您构建一个状态机,创建适当的回调等 编辑:虽然我以前认为std::async只是强迫您显式地传递回调,但它看起来更原始。不管怎样,我认为它主要/完全是一种库功能,而C#5的异步方法主要是一种具有库支持的语言功能 编辑:如评论中进一步指出的,它…cppsync(在另一个答案中提供)看起来像您正在寻找的。“异步”部分很简单,性能看起来也不错(可能比C#实现更好)。 这是丑陋的b/c

C#5的async/await特性涉及异步方法的复杂编译器转换,因此您可以编写看起来非常同步但具有异步点的代码。编译器为您构建一个状态机,创建适当的回调等

编辑:虽然我以前认为std::async只是强迫您显式地传递回调,但它看起来更原始。不管怎样,我认为它主要/完全是一种库功能,而C#5的异步方法主要是一种具有库支持的语言功能

编辑:如评论中进一步指出的,它…

cppsync(在另一个答案中提供)看起来像您正在寻找的。“异步”部分很简单,性能看起来也不错(可能比C#实现更好)。 这是丑陋的b/c,您需要围绕异步回调调用使用特殊的“等待”包装器。提供了一些Boost网络,它们很容易制作,但您不能只是“等待”任何东西: 异步任何方法/函数,

在异步函数中,等待以下任一项:
-异步函数

-异步函数(接受回调)周围的等待包装器(制作简单)

std::async
没有连续回调或完成回调。您所能做的就是在等待它完成时阻塞。与TPL相比,它非常原始,但是在C++中,可以使用Co程序实现C 5的等价于库特征。证明:@瓦伦蒂娜。米利亚:我对C++或Boosiv.Car的知识不够了解你的代码是如何与<代码> >等待< />代码的。我怀疑它不是完全等同的,这并不是说它没有用处。@ValentinMilea:正如我所说,我需要更仔细地看细节来比较它们,但是,如果任何一个只支持库的版本具有语言支持的版本的所有优点,我会感到惊讶。下面的概念证明表明,
await
特性的确切语法可以在堆栈式协同程序的帮助下进行模拟:我真的被这个答案弄糊涂了。我不知道你想说什么。我想他的意思是提供一些类似于C#的async/await的东西,但是你需要包装现有的async API以使其可等待(就像我在Boost.Asio中做的那样)。不是正确的位置,因为问题是关于std::async的。