Concurrency::when_all 函数返回一个std::vector<T>
它等待的所有任务的返回值。
向量中的值是按任何顺序排列的,还是按任务完成的顺序排列的?
Concurrency::when_all 函数返回一个std::vector<T>
它等待的所有任务的返回值。
向量中的值是按任何顺序排列的,还是按任务完成的顺序排列的?
我也无法从微软文档中找到。做了一个简单的测试,线程以某种随机顺序结束,但最终输出是1,2,3,4,5。您可以创建 100 个具有不同随机负载的线程,我认为结果不会改变。结论是您可以在此假设下安全地使用它。
#include <ppltasks.h>
#include <array>
#include <iostream>
using namespace concurrency;
using namespace std;
int wmain()
{
// Start multiple tasks.
array<task<int>, 5> tasks =
{
create_task([]() -> int {
for (int i = 0; i < 100; i++) {
wcout << "thread 1: " << i << endl;
}
return 1;
}),
create_task([]() -> int {
for (int i = 0; i < 100; i++) {
wcout << "thread 2: " << i << endl;
}
return 2;
}),
create_task([]() -> int {
for (int i = 0; i < 100; i++) {
wcout << "thread 3: " << i << endl;
}
return 3;
}),
create_task([]() -> int {
for (int i = 0; i < 100; i++) {
wcout << "thread 4: " << i << endl;
}
return 4;
}),
create_task([]() -> int {
for (int i = 0; i < 100; i++) {
wcout << "thread 5: " << i << endl;;
}
return 5;
})
};
auto joinTask = when_all(begin(tasks), end(tasks)).then([](vector<int> results)
{
for_each(begin(results), end(results), [](int a) {
wcout << a << endl;
});
});
joinTask.wait();
}