多队列多优先级任务调度组件。
Go to file
2020-01-02 16:50:09 +08:00
Falcon.TaskScheduling ITaskScheduler接口增加Start方法 2020-01-02 16:50:09 +08:00
Falcon.TaskSchedulingTests 初步完成开发,简单测试 2020-01-02 15:10:08 +08:00
.gitignore 项目初始化 2019-12-31 10:17:03 +08:00
Falcon.TaskScheduling.sln 初步完成开发,简单测试 2020-01-02 15:10:08 +08:00
README.MD 增加Readme文件说明 2020-01-02 15:50:35 +08:00

多线程多优先级任务调度组件

  1. 首先需要实现ITaskUnit接口。这个接口包含一个用来执行任务的Run方法和一个处理任务结果的TaskCallback方法。Run方法返回结果会作为result参数传递给TaskCallback方法。
  2. 第二步需要实例化一个任务调度器ConcurrentQueueTask它实现了ITaskScheduler接口。
  3. 获得ITaskScheduler对象后可以调用相关的AddXXXXQueue方法将任务单元ITaskUnit加入队列。
  4. 调用ITaskScheduler的Start()方法开始执行任务调度组件会根据加入的任务优先级按顺序执行Run方法并在完成后调用依次调用TaskCallback。
  5. 调用的顺序一般不予加入的顺序相同,只跟加入的优先级队列有关。

下面介绍队列:

  1. System队列该队列具有最高优先级一般用来执行系统同步任务。任务加入队列后将在下次调度发生后马上执行。
  2. First队列该队列优先级低于System队列一般用来执行需要优先执行的任务System中没有任务后开始执行。
  3. Queue一般级队列组该组包含若干队列处于该组队列中的任务会在system和First队列中没有任务后执行。具体执行哪个任务取决于队列的命中率该命中率有weight决定。该值越大命中率越高。
  4. Idel队列空闲队列当System、First和Queue队列均无任务可执行后开始执行。

注意点:

  1. 只有执行Start方法后才开始调度任务并且在所有任务完成后结束调度如果结束调度后再次加入新的任务需要再次调用Start方法重新开始调度。
  2. 任务执行Run中抛出的异常会传入TaskCallback方法进行处理。TaskCallback中抛出的异常不会处理并且会结束整个任务调度。