Workflow 框架中,序列的正确使用

Workflow** 框架中,序列(SeriesWork) 是一组任务的执行顺序,任务按顺序执行,前一个任务完成后才会执行下一个任务。以下是创建和使用序列的步骤:


1. 创建序列

序列可以通过 series_of(task) 获取当前任务所在的序列,或者通过 Workflow::create_series_work() 手动创建。

 

cpp

// 创建一个任务

WFRedisTask *task = WFTaskFactory::create_redis_task("redis://127.0.0.1:6379", 2, callback);

// 获取任务所在的序列

SeriesWork *series = series_of(task);


2. 向序列中添加任务

可以通过 series->push_back(task) 将任务添加到序列的末尾。

 

cpp

WFRedisTask *task2 = WFTaskFactory::create_redis_task("redis://127.0.0.1:6379", 2, callback2); series->push_back(task2);


3. 启动序列

序列会自动启动,只要序列中的第一个任务被启动,整个序列就会按顺序执行。

 

cpp

task->start(); // 启动序列中的第一个任务


4. 示例代码

以下是一个完整的示例,展示如何创建和使用序列:

#include <workflow/Workflow.h>
#include <workflow/WFTaskFactory.h>
#include <workflow/WFFacilities.h>
#include <iostream>
#include <signal.h>

using namespace std;

WFFacilities::WaitGroup waitgroup(1); // 1个任务组

void signalfunc(int signo)
{
    waitgroup.done(); // 结束一个任务
    cout << "done\n";
}

void callback(WFRedisTask *task)
{
    int state = task->get_state();
    int error = task->get_error();
    switch (state)
    {
    case WFT_STATE_DNS_ERROR:
        cout << strerror(error) << endl;
        break;
    case WFT_STATE_SUCCESS:
        cout << "ok" << endl;
        break;
    default:
        cout << "other" << endl;
    }

    protocol::RedisResponse *resp = task->get_resp();
    protocol::RedisValue value;
    resp->get_result(value);

    if (value.is_string() && value.string_value() == "001")
    {
        // 创建第二个任务
        WFRedisTask *task2 = WFTaskFactory::create_redis_task("redis://127.0.0.1:6379", 2, callback2);
        protocol::RedisRequest *req2 = task2->get_req();
        req2->set_request("set", {"002", "34"});

        // 获取当前任务的序列,并添加第二个任务
        SeriesWork *series = series_of(task);
        series->push_back(task2);
    }
}

void callback2(WFRedisTask *task)
{
    int state = task->get_state();
    int error = task->get_error();
    switch (state)
    {
    case WFT_STATE_DNS_ERROR:
        cout << strerror(error) << endl;
        break;
    case WFT_STATE_SUCCESS:
        cout << "ok" << endl;
        break;
    default:
        cout << "other" << endl;
    }
}

int main()
{
    signal(SIGINT, signalfunc);

    // 创建第一个任务
    WFRedisTask *task = WFTaskFactory::create_redis_task("redis://127.0.0.1:6379", 2, callback);
    protocol::RedisRequest *req = task->get_req();
    req->set_request("get", {"1"});

    // 启动任务(序列会自动启动)
    task->start();

    // 等待任务完成
    waitgroup.wait();
}


5. 关键点总结

  • 序列的创建:通过 series_of(task) 获取当前任务的序列,或者手动创建。
  • 任务添加:使用 series->push_back(task) 将任务添加到序列末尾。
  • 序列启动:序列中的第一个任务启动后,整个序列会自动按顺序执行。
  • 任务依赖:序列中的任务按顺序执行,前一个任务完成后才会执行下一个任务。

通过以上方法,你可以在 Workflow 框架中轻松创建和管理任务序列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值