Обратите внимание на следующие точки: < /p>
- Несколько потоков в thread_group необходимы для воспроизведения сбоя. < /li>
2 Coroutine должен работать одновременно. li> Проблема воспроизводилась последовательно на платформах Mac/Win (Linux не был проверен). - При отладке сбой стек вызовов указывал на урожайность внутри блока улова.
Я нашел этот старый форум, в котором упоминается аналогичная проблема, но объяснение мне неясно: https://lists.boost.org.cpp.al/boost-bugs/2016/ 02/44257.php
#include
#include
#include
#include
namespace asio = boost::asio;
using namespace std::chrono_literals;
void TimerCatchYield(asio::steady_timer& timer,
const asio::yield_context& yield) {
boost::system::error_code ec;
try {
throw std::runtime_error("");
} catch (const std::exception&) {
// async_wait(yield) here - causes crash
timer.async_wait(yield[ec]);
}
// async_wait(yield) here - works as expected
}
void coroutineA(asio::steady_timer& timer, const asio::yield_context& yield) {
std::cout
Подробнее здесь: https://stackoverflow.com/questions/794 ... atch-block
Мобильная версия