Во время работы с проточной моделью С++ 11 я заметил, что
std::packaged_task<int(int,int)> task([](int a, int b) { return a + b; });
auto f = task.get_future();
task(2,3);
std::cout << f.get() << '\n';
и
auto f = std::async(std::launch::async,
[](int a, int b) { return a + b; }, 2, 3);
std::cout << f.get() << '\n';
похоже, делает то же самое. Я понимаю, что может быть существенное различие, если я запустил std::async
с std::launch::deferred
, но есть ли в этом случае?
В чем разница между этими двумя подходами и, что более важно, в каких вариантах использования я должен использовать один над другим?