如何按需终止任务?当我这样做时:
CreateTask(TWorker.Create())
.Invoke(@TWorker.Execute)
.MonitorWith(FEventMonitor)
.SetParameter('ThreadID',i)
.Join(FWorkers)
.WithLock(FLockToken).Schedule(GlobalOmniThreadPool).WaitFor(0);
if Assigned(FWorkers) then begin
// FWorkers.TerminateAll; freeze
FWorkers.TerminateAll(0); // freeze
FWorkers:=nil;
GlobalOmniThreadPool.CancelAll;
Log('All tasks stopped',Form1.Memo1);
end
else begin
Log('Nothing to stop',Form1.Memo1);
end;
主应用程序冻结。即使只有 1 个任务正在运行,我是在调试器外部还是内部运行它并不重要。
因为我不想将此代码放在任务中 30 次。令用户和程序员感到沮丧。
If GlobalCancel=true then
Task.Terminate;
如果没有这个,应该有一种方法可以在全球范围内做到这一点。