nested coroutine example + use stackpool for dispatcher in bscs

master
Daniel Kolesa 2017-03-23 00:40:17 +01:00
parent 422a65cade
commit 0e24dcd1c4
2 changed files with 33 additions and 1 deletions

View File

@ -30,6 +30,28 @@ int main() {
generator<int> &gr = dynamic_cast<generator<int> &>(*ctx);
writefln("value of cast back generator: %s", gr.value());
writeln("-- nested coroutine test --");
coroutine<void()> c1 = [](auto yield) {
coroutine<void()> c2 = [&yield](auto) {
writeln("inside c2 1");
yield();
writeln("inside c2 2");
yield();
writeln("inside c2 3");
};
writeln("inside c1 1");
c2();
writeln("inside c1 2");
};
writeln("outside 1");
c1();
writeln("outside 2");
c1();
writeln("outside 3");
c1();
writeln("outside exit");
}
/*
@ -42,4 +64,14 @@ generated: 25
generator is coroutine<int()>: false
generator is generator<int>: true
value of cast back generator: 5
-- nested coroutine test --
outside 1
inside c1 1
inside c2 1
outside 2
inside c2 2
outside 3
inside c2 3
inside c1 2
outside exit
*/

View File

@ -184,7 +184,7 @@ public:
p_stacks(ss, cs),
p_dispatcher([this]() {
dispatch();
}, basic_fixedsize_stack<TR, Protected>{ss}),
}, p_stacks.get_allocator()),
p_coros()
{}