Requests are expected to call Begin when created, and End when finished, with their completion callback and arguments passed to End when possible. If a request needs to invoke more than one callback, have a request barrier in scope when executing callbacks to ensure that new requests are prioritized properly when the priority is being changed from another thread.