前面我们都是通过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. Java 005 枚举

    枚举概述:就是有有限值的集合或类.是指将变量的值一一列出来, 变量的值只限于列举出来的值得范围. 举例: 一周7天, 一年12个月等.回想单列设计模式: 单例类是一个类只有一个实例.那么多例类就是一个 ...

  2. 基于apache的tomcat负载均衡和集群配置

    最近不是很忙,用零碎时间做点小小的实验. 以前公司采用F5负载均衡交换机,F5将请求转发给多台服务器,每台服务器有多个webserver实例,每个webserver分布在多台服务器,交叉式的分布集群. ...

  3. spring异常提示_2

    前缀 'aop' 未绑定:---解决方案------<beansxmlns:aop="http://www.springframework.org/schema/aop" & ...

  4. MYSQL提权总结

    最近在测试一个项目,遇到了MYSQL数据库,想尽办法提权,最终都没有成功,很是郁闷,可能是自己很久没有研究过提权导致的吧,总结一下MYSQL提权的各种姿势吧,权当复习了.关于mysql提权的方法也就那 ...

  5. WP8.1 C#代码 添加/获取Grid.ColumnDefinitions/RowDefinitions

    WP8.1: ColumnDefinitions和RowDefinitions的道理是相同的,语法顺序是一样的,只不过是将ColumnDefinitions换成RowDefinitions而已 获取并 ...

  6. 手机QQ内置网页,微信内置网页中进行分享到QQ和微信的操作

    微信内的网页分享: API内容详见微信开发文档  https://mp.weixin.qq.com/wiki 这里需要注意的是:调用微信API的时候修改的是微信内网页右上角三个点那里打开后,选择分享之 ...

  7. Magento后台简单更换favicon.ico

    刚才需要更换网站的favicon.ico,就是浏览器url前面的那个小图标. 网上稍微搜搜一下,然后就震惊了,号多方法是替换文件的方法,而且文件散步在网站的各个角落. 其实,后台是有直接上传更换的方法 ...

  8. AVD之PANIC: Could not open

    1 原因一:因为我们采用的是绝对路径定位,也就是说在环境变量里面把路径写死了,所以安装都不同,路径读不出来. 解决办法:①在环境变量中创建变量名:ANDROID_SDK_HOME,变量值:你当时安装S ...

  9. PostgreSQL function examples

    warehouse_db=# CREATE TABLE warehouse_tbl(warehouse_id INTEGER NOT NULL,warehouse_name TEXT NOT NULL ...

  10. 小Q系列之失恋

    这个题其实不难  仔细想想,, 注意题中要求的是一天是12个小时 #include<algorithm> #include<stdio.h> #include<math. ...