WF 学习笔记总结(一)

最近想学点WF的东西,就 看了 WXWinter的博客 http://www.cnblogs.com/foundation/category/215023.html

,这篇文章主要是帮自己复习一下。

1. WF项目包括4个:

    Activity Designer Library

    Activity Library

    Workflow Console Application

    WCF workflow service Application 

2. Activity文件使用xaml格式 

3. WF的活动时枝叶树结构。 FlowChar(图结构)和Sequence(顺序结构)是常用的两个直接点。

4, WriteLineActivity是常用的一个Activity,注意他的TextWrite属性允许我们用自己的TextWrite类,只要继承System.IO.TextWriter即可。

5, 可以在代码中使用ActivityXamlService.Load(Stream stream)方法用代码加载一个Activity.

6, 可以继承CodeActivity类来实现自己的Activity,需要override Execute方法。
7,使用Variables可以在Activity中设置变量,变量可以在各自的适用范围中使用。

8.可以使用Arguments来设置出入传出参数。 其中In是传入,out是传出,InOut相当于ref,Property是属性(可以使用ActivityAction和ActivityFunc)。

     1).In参数使用Dictionary<string,object>来传入和传出. in参数在外部不会改变。

     2).Out参数使用Completed(WorkflowApplicationCompletedEventArges e) {string outArg=e.Outputs["ArgName"].Tostring()}这种方法得到。 

9.  几个基础的控制流Activity

    If     Swith<T>   While   DoWhile   Foreach<T>  

10,Parallel并行容器   Pick,PickBaranch触发容器(这种只会触发一个PickBranch的内容)    ParallelForEach<T>循环 

11.  Collection集合操作 . 复杂对象的集合操作,建议使用SortedSet<T>

       1). AddToCollection<T>

       2). RemoveFromCollection<T>

       3). ClearCollection<T>

       4). ExistsInCollection<T>

 12. 键值对集合操作,建议使用SortedList<K,V>集合

 13. WF的一场产生方式与流程结束方式

       WF的异常可以由以下方式产生:

          1). 使用Throw Activity 抛出异常 (不会在异常出断掉)

          2). 代码运行错误 (会在异常处断掉)

         WF流程结束方式: 

          1). WF实例如果在运行过程中没有出现问题,ActivityInstanceState由Executing变为Closed

          2).如果流程 

                 被调用Terminate方法

                 遇到TerminateWorkflow Activity

                 产生异常时没有用WorkflowApplication.OnUnhandledException

                 产生异常时指定UnHandledExceptionAction.Terminal

                 以上情况产生时,ActivityInstanceState由Executing变成Faulted。 

          3). 如果流程 

                 被调用Canceled方法

                 产生异常时指定UnHandledExceptionAction.Canceled

                 以上情况产生时,ActivityInstanceState由Executing变成Canceled。

          4).如果流程 

                 被调用Aborted方法

                 产生异常时指定UnHandledExceptionAction.Aborted 

                 以上情况产生时,流程会运行失败,并处罚Aborted,运行失败的流程没有ActivityInstanceState实例状态。

          5). ActivityInstanceState的Closed,canceled,faulted都表示流程结束,并处罚Completed.
          6). ActivityInstanceState的Aborted,流程会即时消失,触发实例的Aborted,不会触发实例的Completed.

 14. 可以使用TryCatch和Catch<T> 异常捕获  可以使用Rethrow再次抛出异常

 15. 可以使用terminalActivity来结束流程,但是状态为Fault。

 16. CancellationScope取消容器,如果是正常执行到CancellationScope容器的话,那么正常结束,state为closed。如果内部发生异常,并且OnUnhandledException返回Cancel的时候,调用CancelledScope容器,State为Cancled。

 17. 在Parallel中使用CancellationScope,当parallel的CompletionCondition为True是,那么其中一个分钟的CancellationScope被触发的话,就会结束流程,结果为Closed。

18. InvokeMethod调用方法。

     静态方法: 在TargetType中填充静态类,MethodName中填充静态方法。在parameters中写入in,out,in/out参数。在Result中写入返回值variable。当然也可以调用泛型方法。

     实例方法: 只需要在TargetObject中给出类的实例即可。

 19. WF的实例是单线程运行的。可以使用Depay Activity来使线程等待。注意:Delay并不是Thread.Sleep,Parallel是单线程运行的。

 

     1)如果一个Parallel由两个分支,每个分支都有一个Thead.Sleep(10000),那么结果将是delay了20秒,这说明,parallel是单线程运行的。

      2) 如果一个Parallel有两个分支,每个分支都有一个Delay 10秒,那么结果是delay了10秒,这说明Delay是被特殊处理的。

20.  WorkflowInvoker是单线程的, WorkflowApplication是多线程调用的。

      如果一个WorkflowInvoker同时Invoke两个Activity,那么结果将是 

      如果一个WorkflowApplicationi同时加载两个Activity,那么结果将是

21.  InvokeMethod 调用异步方法

       1,需要将InvokeMethod的RunAsynchronously属性为True

       2,需要如下的两个方法;

           1). IAsyncResult Begin[原史方法] ([原史方法参数], AsyncCallback callback, object asyncState)

           void End[原史方法] (IAsyncResult r)

        2).当[RunAsynchronously]属性设为[False]时, [InvokeMethod]调用[原史方法]

             3).当[RunAsynchronously]属性设为[True]时, [InvokeMethod]调用对应的[Begin原史方法]与[End原史方法]方法

             4).如果没的提供与[原史方法]对应的[Begin原史方法]与[End原史方法]方法, [InvokeMethod]将忽略[RunAsynchronously]属性的值

MethodName属性的[Begin原史方法]和[End原史方法]不会调用,调用的是[原史方法]

22.如果想要 InvokeMethod调用异步方法时等待异步方法完成后,流程才继续向下执行, 需要将IAsyncResult接口的CompeltedSynchronously属性要返回False。

转载于:https://www.cnblogs.com/zhaoyun2007/archive/2012/10/09/2717168.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值