首页 > 解决方案 > Delphi TTask:用ExecuteWork在主线程中执行任务

问题描述

ITask我有一个( FTasks)数组,其中包含可变数量的任务。调用一个方法ExecuteTasks,所有挂起的任务都会启动。

我想引入一个小的优化来避免线程创建开销:如果FTasks只包含一个任务,则该任务在主线程中执行(不执行到TTask线程池中)。

ITask有一种ExecuteWork似乎直接执行任务而不使用TTask线程池的方法。是正确的?

一个例子:

var
  FTasks: array of ITask;


procedure ExecuteTasks;
var
   k: Integer;
begin
   // no tasks: exit
   if Length(FTasks) = 0 then Exit;

   // only one task: direct execute
   if Length(FTasks) = 1 then begin
       FTasks[0].ExecuteWork; // Is correct?
       Exit;
   end;

   // more one task: use TTask thread pool
   for k := 0 to Length(FTasks)-1 do begin
       FTasks[k].Start;
   end;

   // wait tasks to complete
   TTask.WaitForAll(FTasksSaveItem);
end;

标签: delphi

解决方案


推荐阅读