惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
L
LangChain Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
D
Docker
WordPress大学
WordPress大学
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
博客园 - 叶小钗
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
有赞技术团队
有赞技术团队
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MongoDB | Blog
MongoDB | Blog
博客园 - Franky

博客园 - 栖息的熊

Mark一些关于线程同步的信息 【转载】安卓巴士Android开发神贴整理 关于Join 异常诡异的mysql连接异常:Fatal error encountered during command execution. 误人子弟的面试题答案 .Net中的安全机制 用定制特性规范构件调用 用重载操作符实现用户数据类型的转换 override和new关键词的差别 你必须知道的值传递和引用传递 windows用户配置文件的复制 求职:本人从事3年工作流引擎开发,熟悉XPDL,.net3.5中WF,Biztalk,开源工作流引擎OBE,期望工作地点上海 Windows Workflow Foundation中实现人工活动的demo,按照XPDL规范的实现 WF消息队列的使用 查数据库死锁的实际例子 喜欢使用VMware的.net程序员要注意呀(Visual Studio启动不了的问题) 编译器错误信息: CS1595: 已在多处定义“ ”;一种可能出现的情况 BPM业务场景分析(1)——内部交易合并开票 高级工作流模式深入业务场景分析(1)——多路合并
对Activity副本的再理解
栖息的熊 · 2008-07-24 · via 博客园 - 栖息的熊

     在看本文之前,先看WF大牛WXWinter的博文:http://www.cnblogs.com/foundation/archive/2008/06/05/1214783.html,本人在看他的博文后,觉得还有一些点没有讲透,想通后,写下此文。

     重提一下WXWinter的博文:

     While与Replicator可以重复执行其子Activity,While与Replicator在每次重复使用Activity时,并不是将其重置到初始状态。而是克隆原始Activity,每个克隆的Activity都单独进行管理。不会干扰其他克隆的Activity。这些克隆的Activity每一个都要有自身的 AEC 来管理状态。

     这段描述没有问题,有两点还没说清楚:

     1、克隆的Activity的可见性。

     2、在什么时候克隆Activity。

     我们从WXWinter的例二入手,例二没有达到预期目的的根本原因就是克隆的Activity的可见性。

     例一中是在流程中给活动实例的MyProperty属性做++操作的,在流程中只能看到真正的Activity1的活动实例,是不可能看到活动的副本的,所以这里++操作就是针对真正的Activity1的活动实例的。而例二中,由于将给活动实例的MyProperty属性做++操作封到了ActivityLibrary里面,运行时++操作是针对活动的副本进行的,所以根本不会影响到真正的活动实例。

     我们经常要封ActivityLibrary的同志就要注意了,必须使用this.Parent.GetActivityByName(this.Name)才能取到真正的活动实例,GetActivityByName的作用是根据指定的类型名返回当前活动及其子运行活动的活动实例。

     问题二什么时候克隆Activity,在串行情况下,在每次执行序列之前克隆Activity,证据是在副本活动中用一下代码:

     private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            Activity1 a1 = this.Parent.GetActivityByName(this.Name) as Activity1;
            a1.MyProperty++;
            Console.WriteLine(MyProperty);
        }

     可以发现副本的MyProperty值也是变化的。

     在并行情况下就是在最初全部克隆好了。