我正在使用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}}