danielgerlag / danielgerlag/workflow-core

here always have 8 - 10 seconds latency to execute next step after executed delay step

Open
#1,316 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
5.9k
Forks
1.3k
Avg merge
1d 1h
Merged PRs (30d)
5

Description

**Describe the bug**
here always have 8 - 10 seconds of latency to execute the next step after the executed delay step
![image](https://github.com/user-attachments/assets/75a71e4e-cdf8-40c1-859e-523c392731ff)

**To Reproduce**
(1) the workflow json is as following:
```
{
"Id": "umms-workflow",
"Steps": [
{
"Id": "StartStep",
"StepType": "MyDemoApp.Worlkflow.UMMS.Steps.StartStep, MyDemoApp",
"NextStepId": "NotifyStep_1"
},
{
"Id": "NotifyStep_1",
"StepType": "MyDemoApp.Worlkflow.UMMS.Steps.NotificationStep, MyDemoApp",
"NextStepId": "WaitStep_1"
},
{
"Id": "WaitStep_1",
"StepType": "MyDemoApp.Worlkflow.UMMS.Steps.Sequence, MyDemoApp",
"Inputs": {
"FlagNameToReset": "data.IsWorkflowSkippedNameOf"
},
"Do": [
[
{
"Id": "DelayStep_1",
"Inputs": {
"Period": "TimeSpan.FromSeconds(30)"
},
"StepType": "MyDemoApp.Worlkflow.UMMS.Steps.DelayStep, MyDemoApp",
"CancelCondition": "data.IsWorkflowSkipped",
"NextStepId": "ExtraWaitStep_1"
},
{
"Id": "ExtraWaitStep_1",
"StepType": "MyDemoApp.Worlkflow.UMMS.Steps.ExtraWaitStep, MyDemoApp",
"CancelCondition": "data.IsWorkflowSkipped",
"Outputs": {
"IsWorkflowSkipped": "true"
}
}
]
],
"NextStepId": "EndStep"
},
{
"Id": "EndStep",
"Outputs": {
"IsWorkflowCompleted": "true"
},
"StepType": "MyDemoApp.Worlkflow.UMMS.Steps.EndStep, MyDemoApp"
}
],
"Version": 1,
"DataType": "MyDemoApp.Worlkflow.UMMS.UmmsWorkflowData, MyDemoApp"
}

```
(2) the MyDemoApp.Worlkflow.UMMS.Steps.Sequence is as following:
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WorkflowCore.Exceptions;
using WorkflowCore.Interface;
using WorkflowCore.Models;
using WorkflowCore.Primitives;

namespace MyDemoApp.Worlkflow.UMMS.Steps
{
public class Sequence : ContainerStepBody
{
public string? FlagNameToReset { get; set; }

public override ExecutionResult Run(IStepExecutionContext context)
{
if (context.PersistenceData == null)
{
return ExecutionResult.Branch(new List { context.Item }, new ControlPersistenceData { ChildrenActive = true });
}

if ((context.PersistenceData is ControlPersistenceData) && ((context.PersistenceData as ControlPersistenceData).ChildrenActive))
{
if (context.Workflow.IsBranchComplete(context.ExecutionPointer.Id))
{
ResetCancelFlag(context);
return ExecutionResult.Next();
}

return ExecutionResult.Persist(context.PersistenceData);
}

throw new CorruptPersistenceDataException();
}

private void ResetCancelFlag(IStepExecutionContext context)
{
var propertyInfo = context.Workflow.Data.GetType().GetProperty(FlagNameToReset);

if (propertyInfo != null && propertyInfo.PropertyType == typeof(bool))
{
propertyInfo.SetValue(context.Workflow.Data, false);
}
}

}
}
```
(3) the MyDemoApp.Worlkflow.UMMS.Steps.DelayStep is as following:
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WorkflowCore.Interface;
using WorkflowCore.Models;

namespace MyDemoApp.Worlkflow.UMMS.Steps
{
public class DelayStep : StepBody
{
public TimeSpan Period { get; set; }

public override ExecutionResult Run(IStepExecutionContext context)
{
if (context.PersistenceData != null)
{
return ExecutionResult.Next();
}

Console.WriteLine("Delay " + Period + " seconds from " + context.Workflow.Id + " at " + DateTime.Now);
return ExecutionResult.Sleep(Period, true);

}

}
}
```
(4) Other Step Class you can just print some logs, no logic.

**Expected behavior**
We expected after 30 seconds, the ExtraWait step will be executed in time after DelayStep finished

**Additional context**
Add any other context about the problem here.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.