zoukankan      html  css  js  c++  java
  • wf(六)

    前面我们都是通过WorkflowInvoker这个类来调用方法的,这种方式是很简单的,因为这是同步的而且同样的调用者调用工作流使用的线程是一样的。

    另外一个调用工作流的方法是通过工作流应用程序类(WorkflowApplication class),这种方式可以运行工作流在一个单独的线程上运行,并且支持被调用的委托

    (当这工作流完成,死锁,或者有一个未处理的异常的时候),应用程序类可以让你创建多线程服务或者客户端程序更简单。

    下面我们将用这种方式来调用活动,并获得调用活动的线程id:


    写一个单元测试,证明工作流的线程id作为返回值返回了:

    1. 打开SayHelloFixture.cs 增加引用 using System.Threading和using System.Diagnostics;

    2.增加单元测试,如下图:

    3运行单元测试会报错,因为我们还没有增加工作流线程的输出参数。


    将工作流线程做为输出参数:

    打开SayHello.xaml增加输出参数名称为WorkflowThread类型为int32,如图:

    目前我们只有一个activity作为Greeting输出,所以我们还需要增加一个activity。

    1. 剪切我们之前做的Assign活动;拖拽一个Sequence到设计界面;然后粘贴我们剪切的Assign活动;

    2导入命名空间System.Threading,如图:

    这个引用其实也不是一定要的,但是为了对Thread有完全的控制权,所以还是添加了。

    3拖拽一个Assign到我们事前做的Assign下面,设置如下图:

    现在运行测试,测试将通过。如果你想看线程id的值,你可以选择调试选择的单元测试,你会发现单元测试线程id和工作流调用的线程id是一样的,

    因为WorkflowInvoker调用工作流和线程是同步的。


    测试虽然通过了但是还存在一个问题,测试虽然证明了工作流线程返回是非零整数,但是没有证明工作流实际处理的线程id。

    我们要做的就是重写单元测试,如下图:

    运行单元测试,通过这可以验证上述证明。

    到此demo6结束

  • 相关阅读:
    进程的实践与练习2
    士兵队列训练问题
    大数相加
    Ignatius and the Princess II
    Parentheses Balance (括号平衡)---栈
    简单计算器
    C++全排列函数next_permutation()和prev_permutation()
    黑白图像
    9*9乘法表
    输入5 个数按从小到大的顺序输出
  • 原文地址:https://www.cnblogs.com/HKKD/p/5102765.html
Copyright © 2011-2022 走看看