简单使用
tf::Executor 提供了异步执行Task的操作tf::Executor::async,并返回Future,用于保留该函数调用的结果。
#include <taskflow/taskflow.hpp>
void print_str(char const* str) {
std::cout << str << std::endl;
}
int main() {
tf::Executor executor;
std::future<int> future = executor.async([](){
print_str("async task");
return 1;
});
print_str(std::to_string(future.get()).c_str());
}
如果不需要关系返回值,推荐使用Executor::silent_async ,相较于tf::Executor::async,减少了一些状态共享的开销:
#include <taskflow/taskflow.hpp>
int main() {
tf::Executor executor;
executor.silent_async([](){
print_str("async task");
return 1;
});
// sleep 1s
std::this_thread::sleep_for(std::chrono::seconds(1));
}
调度器会自动检测异步任务是从外部线程还是工作线程提交的,并使用work stealing来安排其执行:
#include <taskflow/taskflow.hpp>
void print_str(char const* str) {
std::cout << str << std::endl;
}
int main() {
tf::Executor executor;
tf::Taskflow taskflow;
tf::Task my_task = taskflow.emplace(
[&executor](){
// 从 my_task 内部启动一个异步任务
executor.async([&executor](){
// 从 一个异步任务内部启动一个异步任务,可能执行在其他worker线程中
executor.async([&](){
});
});
}
);
executor.run(taskflow