Taskflow:异步任务(Asynchronous Tasking)

简单使用

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值