Можно ли узнать, когда все ожидающие асинхронные задачи в strand
выполнены? Как и thread.join()
в следующем примере:
io_service service;
std::thread thread([&](){ service.run(); });
service.post(some_function);
service.post(another_function);
service.stop();
thread.join();
Это было бы полезно для эффективного выполнения нескольких задач в нескольких потоках. Каждое задание является более сложным, чем обычная функция, и имеет свою нить. Но я не нашел способа подождать, пока он не заработает. Я попытался post
обработчику финализации цепочки в надежде, что он будет вызван последним, но порядок обработчиков в цепочке не определен, поэтому он запускается немедленно.
Код с цепочкой будет:
io_service service;
strand<io_context::executor_type> strand(make_strand(service));
std::thread thread([&](){ service.run(); });
post(strand, some_function);
post(strand, another_function);
// here we want to wait for strand to complete pending tasks
// somewhere else later
service.stop();
thread.join();
Спасибо.