前面我们都是通过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结束

wf(六)的更多相关文章

  1. Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  2. struts2总结六: Struts2的拦截器

    一.Struts2的系统结构图

  3. JavaScript学习总结(十六)——Javascript闭包(Closure)

    原文地址: http://www.cnblogs.com/xdp-gacl/p/3703876.html 闭包(closure)是Javascript语言的一个难点,也是它的特色, 很多高级应用都要依 ...

  4. 浅谈DevExpress<六>:为chart创建动态数据源

    今天搞点稍微复杂些的东西,在列表中点击不同的行时,图表中显示和其数据关联的图,效果如下:

  5. JavaEE学习总结(十六)— Servlet

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  6. WF4.0 基础篇 (一)开始使用WF

    来源:https://www.cnblogs.com/caosenianhuan/p/WF.html 最近公司要重新上线一套新的CRM系统,要重整老系统里的业务流模块,团队讨论已微软的workflow ...

  7. WF从入门到精通学习目录

    WF从入门到精通(第一章):WF简介 WF从入门到精通(第二章):workflow运行时 WF从入门到精通(第三章):workflow实例 WF从入门到精通(第四章):活动及workflow类型介绍 ...

  8. Java学习第六篇:集合类

    一.Java集合类框架 Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合:从Java5以后,J ...

  9. maven学习(十六)——使用Maven构建多模块项目

    在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层).service(业务逻辑层).web(表现层),这样分层之 ...

随机推荐

  1. js 时间函数封装

    html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  2. android模拟器没有键盘的解决方法

    刚开始使用android模拟器的时候,发现自己创建的AVD启动后没有出现侧边的键盘,在网上搜索后,发现很多人都有这个问题,也有文章说直接使用PC上的键盘,因为有对应的快捷键.但是,没有键盘,始终不爽! ...

  3. centos6.7安装Redis

    1.创建安装目录 mkdir /usr/local/redis cd /usr/local/src 2.获取安装包:wget http://download.redis.io/releases/red ...

  4. 深度解析正则表达式exec和match两者使用的异同以及要注意的地方

    1.match match方法属于String正则表达方法. 语法: str.match(regexp) str:要进行匹配的字符串. regexp:一个正则表达式(或者由RegExp()构造成的正则 ...

  5. 关于复选框input[type=checkbox]

    关于复选框input[type=checkbox],其实在前面的文章中说过一次,当时主要关注点在设置复选框的状态,利用prop实现,今天继续关注一下复选框. 自己在项目中,遇到一个全选/全不选的需求, ...

  6. HTML第二本书学习后记

    1,换行标记<br>,不换行标记<nobr></nobr> 2,添加水平线 <hr> 3,插入特殊符号:   空格 &nbsp    " ...

  7. Java线程:线程的同步-同步方法

    Java线程:线程的同步-同步方法   线程的同步是保证多线程安全访问竞争资源的一种手段. 线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源.什么时候需要考虑同步,怎么同步等等问 ...

  8. HTML标签marquee实现滚动效果

    html标签 - <marquee></marquee>可以实现多种滚动效果,无需js控制.使用marquee标记不仅可以移动文字,也可以移动图片,表格等.只需要在<ma ...

  9. gmc银联接口开发demo

    1.接口文档 1.1 无gmc界面接口 (dll/ocx) dll调用(posinf.dll)函数名为:int bankall (char * request,char *response),其中第一 ...

  10. Mac使用最多的软件,整理集合

    软件资源 #[PDF移除密码]Cisdem PDFPasswordRemover 3.0.0 [TNT] #Alfred_3.1.1_737 #fwmso2016vlu2.0 #iHosts #Omn ...