昨天在对做工作流服务时调试发现WWF的状态机工作流有一个奇怪现象:触发状态事件后不会马上改变状态机的状态,而是要等一段时间状态才改变过来。单元测试代码如下:
IWorkflowService ws
=
wm.GetWorkflowService(
"
OrderWorkflow
"
); Guid id
=
ws.StartWorkflow(
null
); System.Threading.Thread.Sleep(
500
);
//
如果省略这句,单元测试会失败
Assert.AreEqual(ws.GetWorkflowCurrentState(id),
"
WaitingForOrderState
"
); ws.DoAction(id,
"
Create
"
,
"
my order
"
); System.Threading.Thread.Sleep(
500
); Assert.AreEqual(ws.GetWorkflowCurrentState(id),
"
OrderOpenState
"
); IProcessStation ps
=
container[
typeof
(IProcessStation)]
as
IProcessStation; Assert.AreEqual(ps.OrderId,
"
my order
"
);
间隔时间大概是200多毫秒(在实际测试中间隔200毫秒出错,间隔300成功)。我加入了工作流状态跟踪服务,改变状态的操作是异步进行的,不过延迟这么久也有点夸张了,不知道是设置问题还是测试版本的BUG,还是本来就是这样设计的。现在还无法想出这个延迟时间会不会对业务逻辑带来什么问题。
文章来源: http://www.agilelabs.cn/blogs/linkin/archive/2006/01/10/503.aspx