C++ provides quite a broad set of features for concurrency support (https://cppreference.com/cpp/thread). The task-based paradigm (i.e. promise/future etc.) is a logical framework which is rather confusing to folks who come from a straight thread-based (think pthreads) background.
Raymond Chen in his own inimitable style makes things clear so one can see that the logical task-based framework is nothing more than a higher level abstraction above thread-based core routines i.e. there is no underlying magic involved.
Using the task-based api makes your code clearer and portable since you are dealing with only logical dataflows amongst your problem-domain "tasks" and not any underlying OS/thread-library/machine level complexities.