programs that use lots of signals and&#x2F;or asynchronous completion of IO or timers (&quot;completions&quot;)<p>completions create all sorts of concurrency problems because they are delivered to the program without any concurrency protection, and writing such protection correctly turns out to be non-trivial.<p>By delivering completions into coroutines, you gain all the concurrency protection that is offered by the green threads, without having to write it from scratch.