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

   连续任务调度示例代码:

python任务调度好学吗 任务调度编程_任务调度

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

运行结果:

python任务调度好学吗 任务调度编程_任务调度_02

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

python任务调度好学吗 任务调度编程_python任务调度好学吗_03

运行结果:

python任务调度好学吗 任务调度编程_示例代码_04

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

示例代码如下:

python任务调度好学吗 任务调度编程_不执行_05

运行结果:

python任务调度好学吗 任务调度编程_示例代码_06

有选择性的连续任务

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

TaskContinuationOptions的值如下:

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

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

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

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

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

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

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

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

python任务调度好学吗 任务调度编程_示例代码_07

运行结果:

python任务调度好学吗 任务调度编程_任务调度_08

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