Skip to content

Commit 0877986

Browse files
committed
improve workflow scheduling
1 parent 29db20e commit 0877986

File tree

2 files changed

+19
-18
lines changed

2 files changed

+19
-18
lines changed

src/WorkflowCore/Services/WorkflowExecutor.cs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ private void ProcessAfterExecutionIteration(WorkflowInstance workflow, WorkflowD
199199

200200
private void DetermineNextExecutionTime(WorkflowInstance workflow)
201201
{
202+
//TODO: move to own class
202203
workflow.NextExecution = null;
203204

204205
if (workflow.Status == WorkflowStatus.Complete)
@@ -212,33 +213,33 @@ private void DetermineNextExecutionTime(WorkflowInstance workflow)
212213
return;
213214
}
214215

215-
long pointerSleep = pointer.SleepUntil.Value.ToUniversalTime().Ticks;
216+
var pointerSleep = pointer.SleepUntil.Value.ToUniversalTime().Ticks;
216217
workflow.NextExecution = Math.Min(pointerSleep, workflow.NextExecution ?? pointerSleep);
217218
}
218219

219220
if (workflow.NextExecution == null)
220221
{
221222
foreach (var pointer in workflow.ExecutionPointers.Where(x => x.Active && (x.Children ?? new List<string>()).Count > 0))
222223
{
223-
if (workflow.ExecutionPointers.Where(x => pointer.Children.Contains(x.Id)).All(x => x.EndTime.HasValue))
224+
if (!workflow.ExecutionPointers.Where(x => x.Scope.Contains(pointer.Id)).All(x => x.EndTime.HasValue))
225+
continue;
226+
227+
if (!pointer.SleepUntil.HasValue)
224228
{
225-
if (!pointer.SleepUntil.HasValue)
226-
{
227-
workflow.NextExecution = 0;
228-
return;
229-
}
230-
231-
long pointerSleep = pointer.SleepUntil.Value.ToUniversalTime().Ticks;
232-
workflow.NextExecution = Math.Min(pointerSleep, workflow.NextExecution ?? pointerSleep);
229+
workflow.NextExecution = 0;
230+
return;
233231
}
232+
233+
var pointerSleep = pointer.SleepUntil.Value.ToUniversalTime().Ticks;
234+
workflow.NextExecution = Math.Min(pointerSleep, workflow.NextExecution ?? pointerSleep);
234235
}
235236
}
236237

237-
if ((workflow.NextExecution == null) && (workflow.ExecutionPointers.All(x => x.EndTime != null)))
238-
{
239-
workflow.Status = WorkflowStatus.Complete;
240-
workflow.CompleteTime = _datetimeProvider.Now.ToUniversalTime();
241-
}
238+
if ((workflow.NextExecution != null) || (workflow.ExecutionPointers.Any(x => x.EndTime == null)))
239+
return;
240+
241+
workflow.Status = WorkflowStatus.Complete;
242+
workflow.CompleteTime = _datetimeProvider.Now.ToUniversalTime();
242243
}
243244

244245
}

src/WorkflowCore/WorkflowCore.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
1616
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
1717
<Description>Workflow Core is a light weight workflow engine targeting .NET Standard.</Description>
18-
<Version>1.6.3</Version>
19-
<AssemblyVersion>1.6.3.0</AssemblyVersion>
20-
<FileVersion>1.6.3.0</FileVersion>
18+
<Version>1.6.4</Version>
19+
<AssemblyVersion>1.6.4.0</AssemblyVersion>
20+
<FileVersion>1.6.4.0</FileVersion>
2121
<PackageReleaseNotes></PackageReleaseNotes>
2222
<PackageIconUrl>https://github.com/danielgerlag/workflow-core/raw/master/src/logo.png</PackageIconUrl>
2323
</PropertyGroup>

0 commit comments

Comments
 (0)