确定已完成的工作流实例何时已持久化



我目前正在将WorkFlowServiceHost与开箱即用的SqlWorkflowInstanceStore结合使用以实现持久性。我需要知道一个已完成的工作流实例何时实际保存在数据库中,即我需要在[System.Activities.DDurableInstancing]中的相关行之后立即发出通知。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中启动另一个线程,我可以看到"已完成"字段确实更新了。

在不不断轮询数据库的情况下,实现这一目标的最优雅方法是什么?我已经查看了实例存储上的.WaitForEvents方法,但这似乎并不能满足我的

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

最新更新