WorkflowCore 提供了定时执行后台任务的功能,使用Schedule可以定义异步执行的任务,在工作流的后台执行。示例代码如下:
using System;
using WorkflowCore.Interface;
namespace ZL.WorflowCoreDemo.ControlStructures
{
public class ScheduleWorkflow : IWorkflow
{
public string Id => "ScheduleWorkflow";
public int Version => 1;
public void Build(IWorkflowBuilder<object> builder)
{
builder
.StartWith(context => Console.WriteLine("开始"))
.Schedule(data => TimeSpan.FromSeconds(5)).Do(schedule => schedule
.StartWith(context => Console.WriteLine("后台工作")))
.Then(context => Console.WriteLine("前台工作"));
}
}
}
在上面的代码中,工作流开始后,定义了一个Schedule,这个任务在延时5秒后,启动一个后台流程。流程的执行代码如下:
IServiceProvider serviceProvider = ConfigureServices();
var host = serviceProvider.GetService<IWorkflowHost>();
host.RegisterWorkflow<ScheduleWorkflow>();
host.Start();
var workflowId = host.StartWorkflow("ScheduleWorkflow", 1, null).Result;
Console.ReadLine();
host.Stop();
流程的执行代码与前面的例子基本类似,执行结果如下:
执行时,前台任务完成5秒后,后台工作才执行。
相关代码可以从Github下载: https://github.com/zhenl/ZL.WorflowCoreDemo