delphi - 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;
解决方案
推荐阅读
- grails - Grails 3 JNDI 数据源抛出 javax.management.InstanceAlreadyExistsException
- visual-studio-code - How do I figure out which extension or service is making a VS Code Helper process use 100% CPU?
- python-3.x - 学python 3的艰辛之路 Ex46指令不清楚
- python-3.x - 将 pandas 中的数据框转换为数组
- javascript - Can glsl be used instead of webgl?
- html - Apply a CSS style to a child span with a dynamic id on hover of a parent div with a dynamic id
- java - 这个Java语句序列后跟变量输入我有什么问题?
- sed - How to manipulate variable in Jenkins pipeline
- android - Android正确的最小宽度限定符
- python - 有没有办法让这段代码更“整洁”?