工作流

注意!!使用工作流必须配置backend!!! ,另外若backend出错会导致工作流终止。

开启工作流

通过 Workflow() 开启工作流,然后通过 Send() 提交子任务。

使用 Send() 时,只有第一个任务才需要任务参数,后续任务的参数默认为前一个任务的返回值。

ser := ytask.Server.NewServer(...)
client:= ser.GetClient()


tId, _ := client.Workflow().
             Send("group1", "add", 123, 44).
             Send("group1", "add").
             Done()

工作流同样支持通过 SetTaskCtl() 设置任务参数。( 设置延时任务时,只支持 RunAfter

对于下面的样例,第二个任务只有ExpireTime,不会继承第一个任务的设置

tId, _ := client.Workflow().
             SetTaskCtl(client.RunAfter, 2*time.Second).
             Send("group1", "add", 123, 44).
             SetTaskCtl(client.ExpireTime, time.Now()).
             Send("group1", "add").
             Done()

获取工作流结果

你可以使用 GetResult() 获取最后一个任务的返回值。

也可以使用 GetResult2() 获取任务流的运行进度。

result, err := client.GetResult2(id, time.Second*2, time.Millisecond*300)

// 说明任务还未开始
if yerrors.IsEqual(err, yerrors.ErrTypeTimeOut) {
        // ...
}

// status: waiting , running , success , failure , expired , abort
for name, status:= range result.Workflow{
        fmt.Println(name, status)
}