J'essaie de joindre deux tâches pplx en utilisant la tâche && operator, où les deux sous-tâches peuvent lancer des exceptions.Comment attraper des exceptions de plusieurs tâches à Casablanca
Je comprends du ppl documentation que je peux attraper une exception dans une continuation finale basée sur les tâches. Cela fonctionne également à Casablanca. Cependant, je ne peux attraper qu'une seule exception dans ma suite finale. Si les deux sous-tâches sont lancées, l'une reste non gérée.
Voici un exemple minimal illustrant mon problème:
#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();
}
Le try/catch est en mesure de rattraper celui des deux exceptions se produit d'abord. Comment puis-je attraper l'autre?