Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Workflow Foundation Internals (III)
Andrew Au
接续上一篇,我们会允许有多个Activity同时被Schedule,换句话说,就是某程度上的并行处理。这情况其实很普遍,比如说多人需要审批一份文档。上一次我们发现ScheduleActivity只能被调用一次,那麽明显的解决方桉就是允许一个States上可以有很多的Delegates。看着states.Frames,我们过往的实现都只会盯着最上层的一个Frames,但是在并行的情况下这样就不成了。我们需要一个像Stack一样,但是有很多个顶的一个数据结构,想一想,这不就是一颗反过来的树吗?我们会在数据结构上放这个棵树所有的叶,然后用父指针去找它的Parent Frame。当我们有很多的叶的时候,只有States就不够了。Activity.Execute将无法知道它应该是在那一个Frame上跑,所以我们要把Execute的参数从States改成Frame,这样的话其它就会变得简单了。
代碼示例:Version 8
我们还是在使用以前的Activity,这只不过是为了安全起见,我们没有使用并行。现在我们使用并行了,最简单的就是Parallel,它只会Schedule两个Read。
代碼示例:Version 9
留意工作还是单线程的在执行。Parallel只不过允许多份工作同时在等着而已。当这些工作实际上是在等外界输入,那它们就是在同时等待。在上一个版本,我们每一个Delegate的先决条件都是Frame,但是很多时候有些工作不能完成不是因为其它工作还没完成,而只不过是它所需要的资料还没到而已。这些资料到最终还是从主程序中获得。我们可以通过States去通知主程序去接收资料,到资料收到的时候,主程序便能执行正在等待数据的工作了。WF3使用Queue的方式去等待数据,但我们发现很多时候我们只需要一个数据项,所以WF4使用了Bookmark。
代碼示例:Version 10
到这里我们就结束我们这旅程了。当然,要做到像今天的WF4还有很漫长的路,但是我希望通过这几篇,大家可以瞭解WF的使计,并可以好好的把它运用到实际场景里,谢谢。
Comments
- Anonymous
April 18, 2010
好文。