WF4 - 从实例存储和InstanceNotReadyException恢复

时间:2016-01-12 10:57:23

标签: c# workflow-foundation-4 workflow-foundation

我正在使用WF4和WorkflowApplication来托管工作流程。工作流程非常简单(在测试阶段)。它归结为一系列具有延迟活动的日志记录活动,然后在完成之前进行更多日志记录。我正在使用SqlWorkflowInstanceStore来保存工作流的持久性。

工作流运行正常,直到达到延迟活动,在这里我可以看到它被保存到持久数据库然后卸载。我查看了代码示例,并使用当前代码(在底部)在延迟过期后恢复工作流程。代码在循环中运行,以确保加载新的(可恢复的)工作流。这一切似乎工作正常,工作流得到恢复,我可以得到预期的日志记录输出 - 但是在工作流完成后,似乎尝试再次恢复它。电话

hasRunnableWorkflows

再次相同,就像恢复完成的工作流程一样。

wfApp.LoadRunnableInstance(); 

设置为true。代码到达时

InstanceNotReadyException (No runnable workflow instances were found in the InstanceStore for this WorkflowApplication to load.)

抛出异常 public Task ResumePendingFlows() { var tcs = new TaskCompletionSource<Guid>(); var store = _workflowInstanceStore?.Store; if (store != null) { bool hasRunnableWorkflows = false; //wait until a event has occurred foreach (var currentEvent in store.WaitForEvents(_handle, TimeSpan.MaxValue)) { if (currentEvent == HasRunnableWorkflowEvent.Value) { hasRunnableWorkflows = true; break; } } if (hasRunnableWorkflows) { //create WorkflowApplication with extensions and instance store var wfApp = CreateWorkflowApplication(); wfApp.LoadRunnableInstance(); Logger?.Debug("Found runnable workflows"); //register completed, unloaded event passing the task completion source RegisterWorkflowEvents(tcs, wfApp); wfApp.Run(); } else { Logger?.Debug("Did not find runnable workflows"); tcs.SetResult(Guid.Empty); } } return tcs.Task; }

我不明白为什么会发生这种情况以及如何防止异常被抛出。如果我忽略了异常,一切似乎都运行良好,但我想知道为什么会发生这种情况,如果我做错了。

恢复工作流程的代码:

{{1}}

0 个答案:

没有答案