我打算使用Windows Workflows的State Machine WorkFlow。
状态机将从两个独立的线程接收事件,状态机当然会改变其状态并根据其当前状态和进入的事件执行操作。
我的问题是,Windows工作流线程的状态机是否安全,这意味着当两个线程同时访问它时,它将保证正确的状态更改?
答案 0 :(得分:4)
工作流执行遵循单线程公寓约定 - 也就是说,工作流的一个特定实例只能在任何运行时内由一个线程执行。这是设计的。
工作流运行时使用内部调度队列来执行工作流实例的操作,因此在同一工作流实例上调用操作的两个线程将首先序列化到调度程序队列,然后由运行时调度的新线程按顺序调用(默认调度)或由每个操作的调用上下文捐赠的线程(手动调度)。
使用持久性服务时,工作流运行时还确保数据库版本也同步 - 另一个进程/计算机上运行的另一个工作流运行时如果当前由另一个工作流运行时打开,则无法从持久性加载相同的工作流实例。
这意味着您不必关心在工作流模型中执行的代码的线程安全性(例如,您不必锁定属性设置器),并且您不必关心竞争条件
答案 1 :(得分:1)
您对Microsoft文档中对此类事物的解释是什么(例如)System.Workflow.Activitie中的State Activity CLass:
线程安全 任何公共静态(在Visual中共享) 基本)这种类型的成员是线程 安全。任何实例成员都不是 保证是线程安全的。
许多相关课程也提供了类似的段落。我的推论是“不”,不是你想要的用途的线程安全。