1, 2) IIRC, the answer is no - i.e. even if your io_service is running in a single thread, you can't be sure that an attempt to cancel i/o operation or timer will really have any effect, because the operation can already be complete so that cancellation won't affect it, and even more than that -- its handler can already be in the queue. I remember there is a discussion on this topic somewhere, but I can't find it at the moment. 3) It seems that in the current implementation your assumption is correct, i.e. the handlers are processed as "fifo", but I agree with Roman that it's not a good idea to rely on such an undocumented and implementation-dependant behaviour. It's better to make your own queue or to organize the things as "request-handler-request..."