我目前正在将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方法,但这似乎没有做我需要的方法
答案 0 :(得分:1)
因为I / O是异步完成的,所以任何要求你这样做的设计都可能产生脆弱的代码。你为什么要这样做?