任务调度问题是多任务编程中的一个常见问题。任务并行框架提供了一系列任务调度的机制。任务调度过程中主要解决连续任务调度和父子任务调度。所谓连续任务调度即一个任务直到另一个任务执行完成才开始执行,在这一过程中需要状态的转移,后续任务需要获取上一任务的执行结果。父子任务调度即一个任务执行上下文内有一组任务(子任务)执行。任务并行框架对于连续任务调度问题有很好的解决。下面我们看看任务并行框架对于连续任务调度提供哪些特性。
连续任务调度示例代码:
通过上面的代码 我们可以看到通过任务实体的ContinueWith接口可以建立起任务之间连续性。
运行结果:
以下是多个任务之间互相连续的示例代码:
运行结果:
一个任务有多个任务与之连续。
示例代码如下:
运行结果:
有选择性的连续任务
有时我们希望在定制任务的连续关系的时候是有选择性的。任务并行框架给我们提供了一个选项,通过设置枚举类型TaskContinuationOptions的值来定制连续任务的行为。
TaskContinuationOptions的值如下:
1. None 默认值,按照指定的顺序调度任务。
2. OnlyOnRanToCompletion 连续任务当上一个任务成功完成才执行,否则不执行。
3. NotOnRanToCompletion 连续任务当上一个任务被取消或抛出了未解决的异常才执行,否则不执行。
4. OnlyOnFaulted 连续任务当上一个任务抛出了未解决的异常才执行,否则不执行。
5. NotOnFaulted 连续任务当上一个任务未抛出了未解决的异常才执行,否则不执行。
6. OnlyOnCancelled 连续任务当上一个任务被取消才执行,否则不执行。
7. NotOnCancelled 连续任务当上一个任务未被取消才执行,否则不执行。
下面的示例演示了抛出异常情况下连续任务处理。
运行结果:
多任务调度中的连续任务调度就介绍到这里,下一篇我们将介绍父子任务调度。
欢迎发表你的观点和看法。