From 1bd4793113c2b61a0fb94138a0d63dc4f8449f97 Mon Sep 17 00:00:00 2001 From: stratos Date: Sun, 19 May 2024 18:20:31 +0800 Subject: [PATCH] =?UTF-8?q?v1.1.0;=20=E5=AE=8C=E5=96=84Readme;=20=E5=85=B6?= =?UTF-8?q?=E5=AE=83=E7=BB=86=E8=8A=82=E8=B0=83=E6=95=B4;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 +++++++++++++++++++ package.props | 2 +- ...uentWorkflowServiceCollectionExtensions.cs | 2 +- .../Extensions/WorkflowContextExtensions.cs | 3 ++ .../Implement/WorkflowContext.cs | 5 +++- 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 58224cb..f027280 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,10 @@ A message driven distributed asynchronous workflow framework. 消息驱动的分 - 目标框架 `net7.0`+; - *针对单个消息类型的Qos; +### NOTE: +- 更新包时应当`尽可能`的`全链路更新`,避免导致的未知问题; +- `WorkflowContext` 核心为 `字符串字典` 其属性在赋值时进行序列化存放,对象后续的修改不会反应到上下文中; + ## 3. 开始使用 ### 3.1 引用 `FluentWorkflow.Core` 包 @@ -264,4 +268,28 @@ services.AddFluentWorkFlow().EnableDiagnostic(); ------- +## 6 流程的中止、挂起与恢复 + +### 6.1 中止流程 +在 `WorkFlow` 的 `On*StageAsync` 和 `On*StageCompletedAsync` 中不执行参数委托 `fireMessage`,则后续流程不再执行 + +### 6.2 流程挂起 +在 `WorkFlow` 的 `On*StageAsync` 和 `On*StageCompletedAsync` 中不执行参数委托 `fireMessage`,中止流程,在此基础上调用 `SerializeContext` 方法将上下文序列化后存放 +```C# +// 存放 contextData 以用于流程恢复 +var contextData = SerializeContext(message.Context); +``` + +### 6.3 流程恢复 +调用具体 `WorkFlow` 的静态方法 `ResumeAsync` 使用挂起的流程数据进行恢复执行 +```C# +// contextData 为序列化的上下文数据 +await XXXXWorkflow.ResumeAsync(contextData, serviceProvider, cancellationToken) +``` + +#### 注意: +恢复流程将会再次调用序列化上下文时的方法,需要注意,小心再次被挂起 + +------- + 更多信息参见源码内的测试代码 diff --git a/package.props b/package.props index a4c9890..44a583d 100644 --- a/package.props +++ b/package.props @@ -1,6 +1,6 @@  - 1.0.0 + 1.1.0 A message driven distributed asynchronous workflow framework. 消息驱动的分布式异步工作流程处理框架。 diff --git a/src/FluentWorkflow.Core/Extensions/FluentWorkflowServiceCollectionExtensions.cs b/src/FluentWorkflow.Core/Extensions/FluentWorkflowServiceCollectionExtensions.cs index 7886d8d..cacd9e4 100644 --- a/src/FluentWorkflow.Core/Extensions/FluentWorkflowServiceCollectionExtensions.cs +++ b/src/FluentWorkflow.Core/Extensions/FluentWorkflowServiceCollectionExtensions.cs @@ -15,7 +15,7 @@ public static class FluentWorkflowServiceCollectionExtensions #region Public 方法 /// - /// + /// 添加 FluentWorkflow 基础组件 /// /// /// diff --git a/src/FluentWorkflow.Core/Extensions/WorkflowContextExtensions.cs b/src/FluentWorkflow.Core/Extensions/WorkflowContextExtensions.cs index 5363ab6..4d9bdee 100644 --- a/src/FluentWorkflow.Core/Extensions/WorkflowContextExtensions.cs +++ b/src/FluentWorkflow.Core/Extensions/WorkflowContextExtensions.cs @@ -32,6 +32,7 @@ public static string GetChildWorkflowAlias(this IWorkflowContext workflowContext /// /// /// + [EditorBrowsable(EditorBrowsableState.Never)] public static void SetChildWorkflowAlias(this IWorkflowContext workflowContext, string alias) { workflowContext.SetValue(FluentWorkflowConstants.ContextKeys.WorkflowAlias, alias); @@ -58,6 +59,7 @@ public static bool TryGetChildWorkflowAlias(this IWorkflowContext workflowContex /// /// /// + [EditorBrowsable(EditorBrowsableState.Never)] public static void SetFailureStackTrace(this IWorkflowContext workflowContext, string? failureStackTrace) { workflowContext.SetValue(FluentWorkflowConstants.ContextKeys.FailureStackTrace, failureStackTrace); @@ -84,6 +86,7 @@ public static bool TryGetFailureStackTrace(this IWorkflowContext workflowContext /// /// /// + [EditorBrowsable(EditorBrowsableState.Never)] public static void SetFailureMessage(this IWorkflowContext workflowContext, string failureMessage) { workflowContext.SetValue(FluentWorkflowConstants.ContextKeys.FailureMessage, failureMessage); diff --git a/src/FluentWorkflow.Core/Implement/WorkflowContext.cs b/src/FluentWorkflow.Core/Implement/WorkflowContext.cs index e20dacc..d8f7a61 100644 --- a/src/FluentWorkflow.Core/Implement/WorkflowContext.cs +++ b/src/FluentWorkflow.Core/Implement/WorkflowContext.cs @@ -1,4 +1,5 @@ -using FluentWorkflow.Interface; +using System.ComponentModel; +using FluentWorkflow.Interface; namespace FluentWorkflow; @@ -102,9 +103,11 @@ public WorkflowContext(string id, IEnumerable> valu #region Public 方法 /// + [EditorBrowsable(EditorBrowsableState.Never)] public void SetCurrentStage(string stage) => DataContainer[FluentWorkflowConstants.ContextKeys.Stage] = CheckBeforeSetCurrentStage(stage); /// + [EditorBrowsable(EditorBrowsableState.Never)] public void SetParent(WorkflowContextMetadata parent) { ArgumentNullException.ThrowIfNull(parent);