"The first argument to asio::spawn() may be a strand, io_service or
completion handler. This argument determines the context in which the
coroutine is permitted to execute."
Can one explain the difference between these contexts and further
execution flow in strict or in detailed terms?