- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 Internet 上进行了搜索,试图找到 co_await
运算符的作用,但我仍然无法理解。我猜是下面的代码:
co_await foo();
暂停协程直到 foo
完成,但在这种情况下它与简单地调用 foo
有何不同:
foo();
这也会挂起当前函数,直到 foo
完成。请解释一下。
最佳答案
如果函数至少包含一个co_await
运算符,整个函数被认为是协程。它的所有范围变量(包括参数)都存储在堆上,而不是堆栈上。这使得暂停函数执行而不丢失其状态并在需要时恢复成为可能。此外,协程在第一次挂起时将控制权返回给调用者,并在第一次 return
时完成。陈述。由于它返回未完成,因此返回类型必须是“等待类型”,例如 std::future<int>
. (C++ 允许您创建自己的可等待类型 - 这太棒了!)调用者可以订阅/co_await
关于功能完成。
重要的是要注意暂停的功能可能会在任何时间和任何线程上恢复和完成;细节取决于实现。
在您的示例中,当您编写 co_await foo()
时,您将仅在 foo
之后到达下一行已完成执行,此行可能会在另一个线程中执行,但是写入 foo()
, 将在 foo()
时进入下一行仅在同一个线程中挂起,您不会收到有关其完成的任何反馈。
关于c++ - co_await 运算符实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50954609/
GCC 允许从 catch 恢复 C++20 协程部分并在协程中调用 co_await再次来自其 catch部分。 在这种情况下,当前处理的异常被认为是什么? 请考虑一个例子: #include #
我尝试尝试本文中提到的 co_await https://blogs.msdn.microsoft.com/vcblog/2016/04/04/using-c-coroutines-to-simpli
我在 Internet 上进行了搜索,试图找到 co_await 运算符的作用,但我仍然无法理解。我猜是下面的代码: co_await foo(); 暂停协程直到 foo 完成,但在这种情况下它与简单
我有一个异步函数 void async_foo(A& a, B& b, C&c, function callback); 我想在无堆栈协程中使用它,所以我写 auto coro_foo(A& a, B
#include #include template struct Awaiter final { bool await_ready() const { return false; }
我想知道是否可以找到可等待的 co_await 的结果类型: 由于无法在未评估的上下文中使用 co_await,我不能这样做 template task<> f(Awaitable&& awaitab
我想知道 co_waiting 具有通过引用捕获的临时值的协程是否有效。那么下面的代码是否有效,我想编译器是否应该将临时变量放在协程框架中作为局部变量: task g(const S&); task
以下代码: try { throw 42; } catch (int i) { co_await somefuture; } 使用带有 -fcoroutines-ts 的 clang 6 和
我有一个 Win32 程序,我想在其中添加一些 winRT 调用。除其他事项外,我想打开一个没有 GUI 界面的文件。 我使用 StorageFile 类的异步文件打开调用,因为下一个调用需要一个 I
我正在尝试使用 boost asio 的 C++20 协程。我目前的意图是嵌入来自 https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/
我正在基于 windows io 完成端口的异步套接字类中添加对协程 ts 的支持。 如果没有协程,io 可以这样完成: sock.async_write(io::buffer(somebuff),
一个简单的函数: awaitable write(const std::vector& data) { auto token = co_await this_coro::token();
以下代码不符合我的预期。 #include #include #include struct symmetic_awaitable { std::coroutine_handle<> _
这个问题已经有答案了: Is it possible to co_await in a catch clause? (1 个回答) 已关闭去年。 我有一个如下所示的代码: auto func() ->
这个问题已经有答案了: Is it possible to co_await in a catch clause? (1 个回答) 已关闭去年。 我有一个如下所示的代码: auto func() ->
结构任务修改自https://github.com/Quuxplusone/coro/blob/master/include/coro/gor_task.h .我只是更改suspend_always
我有一个由 Asio 用 one io_context per thread 编写的 HTTP 服务器库模型。它有一个 io_context_pool检索一个 io_context有顺序地。所以当服务
说到 Boost Asio,我完全是个新手。我玩过回调,一切正常。但是,现在我正在尝试切换到协程,但我遇到了 co_await 的问题。 Visual Studio 2017 社区版说 “此 co_a
我已经安装了 windows 10.0 visual studio 2017(15.2 版)我已经为我的项目(包括 cpprestsdk)从 VS2013 迁移到 VS2017,并使用 co_awai
网上有一些链接 [1 , 2]建议 co_await 应该与 std::experimental::optional 一起使用,并且 VS 2015 Update 2 应该支持它。由于 VS 即使在
我是一名优秀的程序员,十分优秀!