Coroutine example.
Coroutine example.This program will print:
Hello
World!!1
Back in hello(), world_result = 5
Result from hello(): 10
Counting to 5:
1
2
3
4
5
Counting to 3 in fiber:
1
2
3
f2: 1
f1: 2
f2: 3
f1: 4
f2: 5
f1: 6
f2: 7
f1: 8
f2: 9
f1: 10
{
printf("World!!1\n");
co_return 5;
}
{
printf("Hello\n");
int world_result = co_await world();
printf("Back in hello(), world_result = %d\n", world_result);
co_return world_result * 2;
}
{
for(int i = 1; i <= n; i++)
co_yield i;
}
{
int result = hello().
run();
printf("Result from hello(): %d\n", result);
printf("Counting to 5:\n");
for(auto value : count_to(5))
printf(" %d\n", value);
auto generator = count_to(3);
printf("Counting to 3 in fiber:\n");
for(int i = 0; i < 3; i++) {
int x = co_await g;
printf(" %d\n", x);
}
};
zth::join(awaiter(generator).
fiber(
"awaiter"), generator_fiber);
#if ZTH_HAVE_EXCEPTIONS
while(true) {
}
};
auto gen10 = count_to(10);
zth::join(awaiters(gen10).
fiber(
"f1"), awaiters(gen10).
fiber(
"f2"));
#endif
return 0;
}
A coroutine generator producing a sequence of values.
A coroutine task producing a single result value.
int main_fiber(int argc, char **argv)
void outOfWork()
Force a context switch.
fiber_type< F >::fiber fiber(F &&f, Args &&... args)
Create and start a new fiber.
Fiber & currentFiber() noexcept
Return the currently executing fiber.
generator_fiber(Generator &g, Fiber &&f) -> generator_fiber< Generator, std::decay_t< Fiber > >