Some notes:<p>- C++20 coroutines are <i>stackless</i>, meaning that multiple coroutines will share a single OS thread stack. This is non-obvious when you first look in to them them because coroutines look just like functions. The compiler does all the work of ensuring your local variables are captured and allocated as part of the coroutine yield context, but these yield contexts are <i>not stack frames</i>. Every coroutine you invoke from a coroutine has its own context that can outlive the caller.<p>- C++20 coroutine functions are just ordinary functions, and can be called from C code. In fact, coroutine contexts can be cast to and from void* to enable their use from C.<p>- There's currently no generic utility in the C++20 standard library for using C++20 coroutines to defer work. std::future<> only works on threaded code, and you can't really use std::function<>. See Lewis Bakers 'task' class for a usable mechanism <a href="https://github.com/lewissbaker/cppcoro#taskt" rel="nofollow">https://github.com/lewissbaker/cppcoro#taskt</a>