我正在尝试使用任务的&& 运算符加入两个 pplx 任务,其中两个子任务都可能引发异常。
我从ppl 文档中了解到,我可以在基于任务的最终延续中捕获异常。这也适用于卡萨布兰卡。但是,我在最后的延续中只能捕获一个异常。如果两个子任务都抛出,一个仍然未处理。
这是一个说明我的问题的最小示例:
#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();
}
try/catch 能够捕获首先发生的两个异常中的任何一个。我怎样才能抓住另一个?