工作流基础 4 工作流应用程序已完成未触发

本文关键字:工作流 已完成 应用程序 | 更新日期: 2023-09-27 18:35:51

>我有以下代码

AutoResetEvent instanceUnloaded = new AutoResetEvent(false);
WFStepsActivity workflow = WorkflowFactory.Current.BuildWorkflow(workflowinstance, requestinstance.RequestInstanceID);
WorkflowApplication wf = new WorkflowApplication(workflow);
wf.InstanceStore = WFInstanceStore.GetInstanceStore();
WFStepsPersistenceParticipant persist = new WFStepsPersistenceParticipant();
wf.Extensions.Add(persist);
wf.PersistableIdle = (arg) =>
{
    return PersistableIdleAction.Unload;
};
wf.Unloaded = (arg) =>
{
    log.Info("WFName_" + wfsetting.Name + "_Unloaded and return.");
    instanceUnloaded.Set();
};
wf.OnUnhandledException = (arg) =>
{
    return UnhandledExceptionAction.Abort;
};
wf.Completed = (arg) =>
{
    if (arg.CompletionState == ActivityInstanceState.Closed)
    {
        persist.WorklflowCompleted = true;
    }
};
wf.Run();
instanceUnloaded.WaitOne();
return persist.WorklflowCompleted;

其中,WFStepsActivity 只是我们从设置构建的活动性结构。工作流当前在创建书签时结束。

context.CreateBookmark(context.WorkflowInstanceId.ToString(), new System.Activities.BookmarkCallback(OnResumeBookmark));

问题是在创建书签后,永远不会触发wf.Completed

想要检查如果创建了书签,是否触发了完成。

据我所知,如果您取消,终止,将触发完成事件

不是应该一旦书签的工作流停止,就会触发此事件吗?

工作流基础 4 工作流应用程序已完成未触发

书签会导致

工作流变为空闲状态,这意味着您必须有目的地在书签处恢复才能继续并完成工作流。首先要做的是:格罗克书签。

不确定您是否提供了足够的代码来允许任何人正确诊断确切的问题(我看不到您的书签创建,也看不到您的支持类等)。

您的工作流也可能引发异常,其详细信息正在被吞噬。如果您想捕获并记录任何未经处理的异常,我会因此修改您的代码:

Exception error = null;
wf.OnUnhandledException = (arg) =>
{
   error = arg.UnhandledException;
   return UnhandledExceptionAction.Abort;
};
// and then after you've waited for completion...
if (error != null) {
   throw error; // or handle it another way
}

也很有用:为工作流配置跟踪