Я хотел бы использовать PPL "when_all" для задач разных типов. И добавьте вызов «тогда» к этой задаче.
Но when_all возвращает задачу, которая принимает вектор, поэтому все элементы должны быть одного типа. Итак, как мне это сделать?
Это то, что я придумал, но это похоже на взлом:
//3 different types:
int out1;
float out2;
char out3;
//Unfortunately I cant use tasks with return values as the types would be different ...
auto t1 = concurrency::create_task([&out1](){out1 = 1; }); //some expensive operation
auto t2 = concurrency::create_task([&out2](){out2 = 2; }); //some expensive operation
auto t3 = concurrency::create_task([&out3](){out3 = 3; }); //some expensive operation
auto t4 = (t1 && t2 && t3); //when_all doesnt block
auto t5 = t4.then([&out1, &out2, &out3](){
std::string ret = "out1: " + std::to_string(out1) + ", out2: " + std::to_string(out2) + ", out3: " + std::to_string(out3);
return ret;
});
auto str = t5.get();
std::cout << str << std::endl;
У кого-нибудь есть идея получше?
(parallel_invoke блокирует, поэтому я не хочу его использовать)