Was ist der Unterschied zwischen packaged_task und async?
Bei der Arbeit mit dem Thread-Modell von C ++ 11 ist mir das aufgefallen
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';
und
auto f = std::async(std::launch::async,
[](int a, int b) { return a + b; }, 2, 3);
std::cout << f.get() << '\n';
scheinen genau das gleiche zu tun. Ich verstehe, dass es einen großen Unterschied geben könnte, wenn ich rennestd::async
mitstd::launch::deferred
, aber gibt es in diesem Fall eine?
Was ist der Unterschied zwischen diesen beiden Ansätzen und was noch wichtiger ist, in welchen Anwendungsfällen sollte ich einen über den anderen setzen?