分析PersistableIdleAction的枚举值
我们在创建和运行长时间运行的工作流(二)中的ConfigureWorkflowApplication方法里面,在wfApp的PersistableIdle事件发生后,返回PersistableIdleAction.Unload,目的是指定 System.Activities.WorkflowApplication 应保持并卸载工作流,意为宿主不再锁定工作流实例,这样我们就可以创建新的工作流宿主wfApp2去加载此工作流实例了。
但是如果我们将PersistableIdleAction.Unload改成PersistableIdleAction.Persist,那么这个时候工作流实例是被宿主锁定的。我们可以通过下面的截图看到两者的不同:
PersistableIdleAction.Unload方式
PersistableIdleAction.Persist方式
我们可以看到[InstancesTable]表中的前后两条记录在SurrogateLockOwner字段上的变化,后者被锁定。如果我们现在开始输入数字,点击EnterGuess按钮后会出现以下画面,提示:InstancePersistenceCommand 的执行被中断,因为另一个有效的 InstanceHandle 在实例“e4e87df9-8166-444d-ad94-03d8549feefe”上持有锁,这表示已加载该实例的未过时副本。应使用或卸载所加载的实例副本及其关联 InstanceHandle。