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

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

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

运行结果:

一个任务有多个任务与之连续。
示例代码如下:

运行结果:

有选择性的连续任务
有时我们希望在定制任务的连续关系的时候是有选择性的。任务并行框架给我们提供了一个选项,通过设置枚举类型TaskContinuationOptions的值来定制连续任务的行为。
TaskContinuationOptions的值如下:
1. None 默认值,按照指定的顺序调度任务。
2. OnlyOnRanToCompletion 连续任务当上一个任务成功完成才执行,否则不执行。
3. NotOnRanToCompletion 连续任务当上一个任务被取消或抛出了未解决的异常才执行,否则不执行。
4. OnlyOnFaulted 连续任务当上一个任务抛出了未解决的异常才执行,否则不执行。
5. NotOnFaulted 连续任务当上一个任务未抛出了未解决的异常才执行,否则不执行。
6. OnlyOnCancelled 连续任务当上一个任务被取消才执行,否则不执行。
7. NotOnCancelled 连续任务当上一个任务未被取消才执行,否则不执行。
下面的示例演示了抛出异常情况下连续任务处理。

运行结果:

多任务调度中的连续任务调度就介绍到这里
















