Я пытаюсь присоединиться к двум задачам pplx, используя задачу && operator, где обе подзадачи могут генерировать исключения.Как поймать исключения из нескольких задач в Casablanca
Я понимаю из ppl documentation, что я могу поймать исключение в окончательном, основанном на задании продолжении. Это работает и в Касабланке. Однако я могу уловить только одно исключение в своем последнем продолжении. Если оба подзадачи бросаются, один остается необработанным.
Вот минимальный пример, иллюстрирующий мою проблему:
#include <pplx/pplxtasks.h>
#include <iostream>
int main(int argc, char *argv[])
{
int a = 0; int b = 0;
auto t1 = pplx::create_task([a] { return a+1; })
.then([](int a) { throw std::runtime_error("a");
return a+1; });
auto t2 = pplx::create_task([b] { return b+1; })
.then([](int b) { throw std::runtime_error("b");
return b+1; });
(t1 && t2)
.then([] (std::vector<int>) { /*...*/ })
.then([] (pplx::task<void> prev) {
try {
prev.get();
} catch (std::runtime_error e) {
std::cout << "caught " << e.what() << std::endl;
}
});
std::cin.get();
}
пробном/Загвоздка в состоянии поймать какой из двух исключений происходит первым. Как я могу поймать другого?