Пользовательские разрешения Windows IIS WebDAV

Ключом к пониманию ASIO является понимание того, что обработчики завершения выполняются только в контексте потока, который вызвал io_service.run(), независимо от того, какой поток называется асинхронным методом. Если вы только вызвали io_service.run() в одном потоке, то все обработчики завершения будут выполняться последовательно в контексте этого потока. Если вы вызвали io_service.run() в более чем одном потоке, то обработчики завершения будут выполняться в контексте одного из этих потоков. Вы можете думать об этом как о пуле потоков, где потоки в пуле - это те потоки, которые вызвали io_service.run() на одном и том же объекте io_service.

Если у вас есть несколько потоков, вызовите io_service.run(), тогда вы может заставить сериализовать обработчики завершения, помещая их в strand.

Чтобы ответить на последнюю часть вашего вопроса, вы должны позвонить boost::async_write(). Это отправит операцию записи в поток, который вызвал io_service.run(), и вызывается обработчик завершения, когда запись выполнена. Если вам нужно сериализовать эту операцию, это немного сложнее, и вы должны прочитать документацию по нитям здесь .

0
задан aog 20 March 2019 в 07:43
поделиться