Maybe I'm being dense, but wouldn't swapping these chunks serve that purpose?  eg:

    payload->stream->write()
    ....
    payload->cb()