我目前正在将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是异步完成的,所以任何要求您这样做的设计都可能产生脆弱的代码。你为什么要这么做?