zoukankan      html  css  js  c++  java
  • WF本质论 读书心得 3 活动的执行

    调度Scheduling

    调度器:
        建立一个队列,让其中的工作项(即活动中的委托方法,称之为调度器工作项)分配到目标活动
        使用Invoke<T>方法, 将ContinueAt()的工作项送进调度器队列,同时分配工作项,同时执行相应的委托方法
        调度器工作队列 != WF程序队列, 
            前者由runtime管理, 工作项是ContinueAt()这样的delegate
            后者由WorkflowQueueService管理, 其中放的是WorkflowQueue的实例

    活动状态机

    两个枚举
        AES, 活动的执行状态
        AER, 活动的执行结果

    AEC实现了IDispose接口,所以AEC不能缓存,比如说Execute方法,AEC对象作为参数,当方法返回时,AEC对象会立刻被销毁.

    活动的服务:
        Main()中, 在WF运行时中添加服务:    runtime.AddService(new Service1());
        通过context获取该服务:context.GetService<Service1>();
        ----由宿主根据抽象类,自主选择使用那个Service,详细见第5章

    回顾书签
        一个例子: 一个活动将工作委托于自身    
            于是,在创建书签的同时就恢复了书签,中间没有等待.Execute方法中使用: base.Invoke(ContinueAt, SystemArgs.Empty)方法即可
            这时,ContinueAt方法结尾要加上context.CloseActivity();,从而使活动状态变为AES.Closed.
            Invoke方法的定义:    Invoke<T>(EventHandler<T> handler, T e); e为handler委托的参数

        WF程序的执行:
            首先WorkflowRuntime.CreateWorkflow()返回WF程序实例instence, 并为其准备了一个调度器及工作队列.此时WF程序中的所有活动都处于Initialized状态
            然后instance.Start()运行WF程序实例,通过活动的Execute方法,将



  • 相关阅读:
    python中的 if __name__ == "__main__": 语句的作用
    python的打包与解包
    python循环删除列表元素
    python字典键值对新增与修改的几种方法及差异总结
    python列表元素删除的几种方法以及差异总结
    python之redis(二)
    python之redis(一)
    python之mysql(四)
    python之mysql(三)
    python之mysql(二)
  • 原文地址:https://www.cnblogs.com/Jax/p/1083023.html
Copyright © 2011-2022 走看看