确定何时保留已完成的工作流实例

时间:2012-02-09 22:55:17

标签: .net workflow-foundation-4

我目前正在将WorkFlowServiceHost与开箱即用的SqlWorkflowInstanceStore结合使用以实现持久性目的。 我需要知道完成的工作流实例何时实际存在于数据库中,即我需要在[System.Activities.DurableInstancing]中的相关行之后立即通知.InstancesTable已更新为iscompleted = 1

我继承了trackingparticipant类,并重写了TRACK方法。

然后我执行以下操作添加个人资料..

    Dim instanceQuery As New WorkflowInstanceQuery
    instanceQuery.States.Add(WorkflowInstanceStates.Completed)

    Dim runCompletedTrackingProfile As New TrackingProfile
    runCompletedTrackingProfile.Name = "runCompletedTrackingProfile"
    runCompletedTrackingProfile.Queries.Add(instanceQuery)

    Dim trackingParticipant As New RunCompletedTrackingParticipant With {.TrackingProfile = runCompletedTrackingProfile}

    _CommPayRunWorkFlowServiceHost.WorkflowExtensions.Add(trackingParticipant)

这一切都运行正常,如果我在TrackingParticipant类中设置断点,它将在预期的时间点击。 但是,此时,虽然内存中的工作流实例已完成,但数据库尚未更新。 我假设这是因为持久性代码在同一个线程上运行,因为如果我在trackingparticipant中启动另一个线程, 我可以看到'iscompleted'字段会更新。

在不连续轮询数据库的情况下实现此目标的最优雅方法是什么?我已经查看了实例存储上的.WaitForEvents方法,但这似乎没有做我需要的方法

1 个答案:

答案 0 :(得分:1)

因为I / O是异步完成的,所以任何要求你这样做的设计都可能产生脆弱的代码。你为什么要这样做?

相关问题