【发布时间】:2019-12-18 23:31:51
【问题描述】:
我有一个很长的协程,我想把它分成更小的协程。就像使用常规函数一样,使代码更清晰。它的行为应该就像只有一个大协程,而所有较小的协程都是连续发生的。
我正在使用#include <experimental/coroutine>。
我一直在尝试这样的事情:
resumable part1_coroutine()
{
cout << "1" << endl;
co_await suspend_always();
}
resumable part2_coroutine()
{
cout << "2" << endl;
co_await suspend_always();
}
resumable main_coroutine()
{
cout << "main" << endl;
part1_coroutine();
part2_coroutine();
co_await suspend_always();
}
但似乎发生的是part1_coroutine() 和part2_coroutine() 根本不会被执行。
【问题讨论】:
-
不清楚
suspend_always和resumable的目的是什么。 -
@NicolBolas
suspend_always是std::experimental::suspend_always。resumable来自这里:blog.panicsoftware.com/your-first-coroutine -
这并不能解释你试图通过使用它们来实现什么。为什么最后这些函数
co_await suspend_always()?为什么他们返回resumable并使用随附的承诺类型?为什么要丢弃part1和part2函数返回的resumable?你说你希望这些函数表现得像一个协程,但我在这里看不到任何表现得像协程的东西。 -
我有一个函数,例如。一分钟完成 (
main_coroutine())。我不希望它阻止程序其余部分的执行。它由许多较小的部分组成,例如每个需要 1 秒 (part1_coroutine)。如果那些阻止执行也没关系。我可以做一个线程。但我宁愿使用协程,因为它会使与主程序的通信更容易。我以前在 Unity 和 C# 中使用过协程,这是我经常做的事情。也许我把我的例子简化得太多了,但我不想让它看起来太复杂。 -
如果您向我们展示您正在尝试编写的代码的“长协程”版本是什么,那将非常有帮助。就像,拿上面的代码,写它的长格式版本。
标签: c++ visual-studio-2019 c++20 c++-coroutine