最近想做一个OA相关的网站开发,一直都听说有workflow的东西,之前也断断续续学习过 Workflow Foundation 4.0,还是没有搞明白到底能够用它做什么

 但还是觉得workflow在某种情形下应该可以适用,虽然还没有答案,网上搜楼了一通,发现一个workflow-core的东西,觉得挺有意思,遂停下来,琢磨一下,现分享与大家。

 

 * 简介

workflow core的GitHub主页

如主页上介绍的,workflow core作为一个轻量级workflow引擎,可以嵌入到项目中,其底层是用.net standard 2.0开发,可以用来追踪长时间运行的任务状态,功能也比较强大,支持插件形式持久化,和多节点并行处理,貌似很牛。并且目前有给一个 Conductor 项目,就是使用workflow core作为内核的workflow服务器(原来运行workflow,需要单独的一个服务器啊),Conductor这里就不展开了。workflow core支持fluent语法,写起来也非常美观,虽然没有WF那样有图形化的操作界面,但感觉代码比较干净。

- 插播.Net Standard 2.0 简介

开始的时候不了解什么是.Net Standard 2.0,这篇文章讲得比较清楚,.Net Standard 与 .Net Framework关系 还有这个.NET Core 2.0 是您的最好选择吗,原来微软为了统一.Net 的各种平台,出了一个.Net Standard 标准库,基于这个库开发的,可以应用于.net framework 4.6.1以上版本,也可以应用于.net core 2.0以上

了解了相关内容后,直接打开说明,照着例子走一遭了。

 

* 示例1

新建一个项目,指明使用.net framework 4.6.1以上,新建项目后,在Package Manager Console中,安装workflow core:Install-Package WorkflowCore,安装这个包会默认安装一系列的依赖包

可能由于版本的关系,还需要另外安装两个包:Microsoft.Extensions.Logging 和 Microsoft.Extensions.Logging.Debug。这样就可以按照Sample 01开始编写代码了

workflow-core 简介

 

Sample01是一个helloworld,包含了几部分内容:

1. 构建StepBody,就是workflow中需要执行的内容,每个类继承自StepBody这个虚拟类,重载ExecutionResult Run(IStepExecutionContext context),这个函数中完成所需的工作

 1     public class HelloWorld : StepBody
 2     {
 3         private ILogger logger;
 4 
 5         public HelloWorld(ILoggerFactory loggerFactory)
 6         {
 7             logger = loggerFactory.CreateLogger<HelloWorld>();
 8         }
 9 
10         public override ExecutionResult Run(IStepExecutionContext context)
11         {
12             Console.WriteLine("Hello world, workflow");
13             logger.LogInformation("Helloworld workflow");
14 
15             return ExecutionResult.Next();
16         }
17     }
18 
19 
20     public class GoodbyeWorld : StepBody
21     {
22         private ILogger logger;
23 
24         public GoodbyeWorld(ILoggerFactory loggerFactory)
25         {
26             logger = loggerFactory.CreateLogger<GoodbyeWorld>();
27         }
28 
29         public override ExecutionResult Run(IStepExecutionContext context)
30         {
31             Console.WriteLine("Workflow, Goodbye");
32             logger.LogInformation("Goodbye workflow");
33 
34             return ExecutionResult.Next();
35         }
36     }
37 
38     public class SleepStep : StepBody
39     {
40         private ILogger logger;
41 
42         public SleepStep(ILoggerFactory loggerFactory)
43         {
44             logger = loggerFactory.CreateLogger("SleepStep");
45         }
46 
47         public override ExecutionResult Run(IStepExecutionContext context)
48         {
49             Thread.Sleep(1000);
50 
51             logger.LogInformation("Sleeped");
52 
53             return ExecutionResult.Next();
54         }
55     }
View Code

相关文章: