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结束

  • 相关阅读:
    Can't remove netstandard folder from output path (.net standard)
    website项目的reference问题
    The type exists in both DLLs
    git常用配置
    Map dependencies with code maps
    How to check HTML version of any website
    Bootstrap UI 编辑器
    网上职位要求对照
    Use of implicitly declared global variable
    ResolveUrl in external JavaScript file in asp.net project
  • 原文地址:https://www.cnblogs.com/HKKD/p/5102765.html
Copyright © 2011-2022 走看看