Instead of moving the cursor up and clearing each line before rendering the output, move to the top first, print each line, and then clear the rest of the line to erase old output. This avoids the case where all lines are empty for a few milliseconds as the sequences are being parsed.
This handles blocking the caller thread, setting up the coroutine scope for work, and waiting for the final frame to render.
Also add a new simple example (although it's partially broken since the final frame is missing).