我想在不同類型的任務上使用PPL「when_all」。然後給該任務添加一個「然後」調用。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塊,所以我不希望使用)
也許是task_group? –