tf::Continuation token_; // this is a functor-like object that can be called to signify the task is actually complete. void StartExpensiveTaskWithToken(tf::Continuation token) { token_ = token; } tf::Taskflow flow; auto t1 = flow.emplace([](tf::Continuation token)) { std::cout << "T1 running..."; StartExpensiveTaskWithToken(token); } auto t2 = flow.placeholder(); t2.succeed(t1); // Output T1 running... // now t2 is still blocked, but t1 is not scheduled on an executor. All threads in the executor are free. // task finishes and somebody calls `token_()` T2 runs