Boost Asio: В чем разница между исполнителем, переданным в boost::asio::post, и связанным исполнителем CompletionToken?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Boost Asio: В чем разница между исполнителем, переданным в boost::asio::post, и связанным исполнителем CompletionToken?

Сообщение Anonymous »

Для таких методов, как post и send, есть одна перегрузка, принимающая только CompletionToken, а другая дополнительно принимающая Executor. Насколько мне известно, перегрузка без Executor работает так, как если бы перегрузка с Executor была вызвана с связанным с CompletionToken исполнителем. Однако каков эффект от передачи Executor для публикации, который не связан с исполнителем CompletionToken? Какова роль каждого из исполнителей? На каком исполнителе будет выполняться обработчик CompetionToken?
Я уже узнал, что утверждение в

Код: Выделить всё

boost::asio::io_context ioc;
auto ioc_ex = ioc.get_executor();

auto strand_a = boost::asio::make_strand(ioc_ex);
auto strand_b = boost::asio::make_strand(ioc_ex);

boost::asio::post(strand_a, boost::asio::bind_executor(strand_b, [&]() {
assert(strand_a.running_in_this_thread()
&& strand_b.running_in_this_thread());
}));
ioc.run();
успешно. Это меня удивляет, поскольку я предполагал, что обработчик CompetionToken будет выполняться только в одном Executor ( в этом случае).
В других ответах (например, здесь и здесь) я читал, что Исполнитель, переданный в сообщение, работает как резервный Исполнитель для выполнения обработчика CompletionToken, в случае, если у последнего нет связанного исполнителя. Однако это не может быть его единственное использование, так как в противном случае приведенный выше код просто проигнорировал бы «резервный» Executor стенд_a, учитывая, что CompletionToken явно привязан к стенду_b.

Подробнее здесь: https://stackoverflow.com/questions/785 ... oostasiopo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»