タスク オン デマンドを強制終了するにはどうすればよいですか? 私がこれを行うとき:
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;
これなしでグローバルにこれを行う方法があるはずです。