smart coder=smart code ++

高并发,高性能,分布式系统和服务器端设计
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

多任务编程(五)任务调度之连续任务

Posted on 2010-06-29 21:51  smart coder  阅读(1706)  评论(1编辑  收藏  举报

      任务调度问题是多任务编程中的一个常见问题。任务并行框架提供了一系列任务调度的机制。任务调度过程中主要解决连续任务调度和父子任务调度。所谓连续任务调度即一个任务直到另一个任务执行完成才开始执行,在这一过程中需要状态的转移,后续任务需要获取上一任务的执行结果。父子任务调度即一个任务执行上下文内有一组任务(子任务)执行。任务并行框架对于连续任务调度问题有很好的解决。下面我们看看任务并行框架对于连续任务调度提供哪些特性。

   连续任务调度示例代码:

      通过上面的代码 我们可以看到通过任务实体的ContinueWith接口可以建立起任务之间连续性。

运行结果:

以下是多个任务之间互相连续的示例代码:

运行结果:

一个任务有多个任务与之连续。

示例代码如下:

运行结果:

有选择性的连续任务

有时我们希望在定制任务的连续关系的时候是有选择性的。任务并行框架给我们提供了一个选项,通过设置枚举类型TaskContinuationOptions的值来定制连续任务的行为。

TaskContinuationOptions的值如下:

1.  None  默认值,按照指定的顺序调度任务。

2.  OnlyOnRanToCompletion 连续任务当上一个任务成功完成才执行,否则不执行。

3.  NotOnRanToCompletion 连续任务当上一个任务被取消或抛出了未解决的异常才执行,否则不执行。

4.  OnlyOnFaulted 连续任务当上一个任务抛出了未解决的异常才执行,否则不执行。

5.  NotOnFaulted 连续任务当上一个任务未抛出了未解决的异常才执行,否则不执行。

6.  OnlyOnCancelled 连续任务当上一个任务被取消才执行,否则不执行。

7.  NotOnCancelled 连续任务当上一个任务未被取消才执行,否则不执行。

下面的示例演示了抛出异常情况下连续任务处理。

运行结果:

多任务调度中的连续任务调度就介绍到这里,下一篇我们将介绍父子任务调度。

欢迎发表你的观点和看法。