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结束
wf(六)的更多相关文章
- Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)
<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...
- struts2总结六: Struts2的拦截器
一.Struts2的系统结构图
- JavaScript学习总结(十六)——Javascript闭包(Closure)
原文地址: http://www.cnblogs.com/xdp-gacl/p/3703876.html 闭包(closure)是Javascript语言的一个难点,也是它的特色, 很多高级应用都要依 ...
- 浅谈DevExpress<六>:为chart创建动态数据源
今天搞点稍微复杂些的东西,在列表中点击不同的行时,图表中显示和其数据关联的图,效果如下:
- JavaEE学习总结(十六)— Servlet
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- WF4.0 基础篇 (一)开始使用WF
来源:https://www.cnblogs.com/caosenianhuan/p/WF.html 最近公司要重新上线一套新的CRM系统,要重整老系统里的业务流模块,团队讨论已微软的workflow ...
- WF从入门到精通学习目录
WF从入门到精通(第一章):WF简介 WF从入门到精通(第二章):workflow运行时 WF从入门到精通(第三章):workflow实例 WF从入门到精通(第四章):活动及workflow类型介绍 ...
- Java学习第六篇:集合类
一.Java集合类框架 Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合:从Java5以后,J ...
- maven学习(十六)——使用Maven构建多模块项目
在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层).service(业务逻辑层).web(表现层),这样分层之 ...
随机推荐
- [skill] 进程 线程
在业务逻辑上: 进程线程没有区别. 在系统资源上: 进程拥有自己的地址空间.线程拥有自己的堆栈和临时变量,与其他线程共享地址空间. 在通信代价上: 线程间通信代价更低,实现更方便.进程通信相对开销比较 ...
- linq join的lambda写法
var query = _db.Bank_CommercialOpus .Join(_db.Bank_Opus, s => s.OpusID, Opus => Opus.ID, (s, O ...
- easyui 分页 MVC
View <script type="text/javascript"> var dd; var grid; $(function () { var queryData ...
- Json与常见的类型之间的转换
常用的json list转json List list=new ArrayList(); list.add("1"); list.add("2"); JsonA ...
- Java局部变量
局部变量是在方法被执行时创建,在方法执行结束时被销毁.局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误. 在相互不嵌套的作用域中可以同时声明两个名称,类型相同的局部变量, public ...
- MFC操作excel
环境:VS2013+office2007 头文件: #pragma once #ifndef __MYEXCEL_H_ #define __MYEXCEL_H_ #include "CApp ...
- [原创]如何在Parcelable中使用泛型
[原创]如何在Parcelable中使用泛型 实体类在实现Parcelable接口时,除了要实现它的几个方法之外,还另外要定义一个静态常量CREATOR,如下例所示: public static cl ...
- imx6 关闭调试串口
需要关闭imx6调试串口,用作普通的串口使用. 参考链接 http://blog.csdn.net/neiloid/article/details/7585876 http://www.cnblogs ...
- [SharePoint 2010] Modify lookup mapping with PowerShell
SharePoint支持将列表保存成列表模板,但当列表包含Lookup字段时,通过模板创建的列表会丢失Lookup字段的信息. 通过PowerShell,可以修改Lookup字段的xml内容. Fun ...
- 化繁为简,最简易的SqlDataSource配合Cache使用~
最近一个小项目用了比较方便傻瓜的DevExpress控件,实践中DevExpress的控件确实很方便. 在用ASPxGridView控件的时候,为了偷懒结合了SqlDataSource使用,但一直在大 ...