在主窗体闭包上,OTL 线程不会关闭



当OTL踏板仍在使用IOmniCancelToken时关闭MainForm不会终止线程。使用以下任务配置代码

私人 取消令牌:IOmniCancelToken;

  CancelToken := CreateOmniCancellationToken;
  FWorker := Parallel.ForEach(0, CalcList.Count-1)
    .TaskConfig(Parallel.TaskConfig.OnMessage(Self))
    .TaskConfig(Parallel.TaskConfig.CancelWith(CancelToken))
    .NumTasks(nMax)  
    .NoWait
    .OnStop(procedure (const task: IOmniTask)
     begin
       task.Invoke(procedure begin
         FWorker := nil;
        end);
      end);
  FWorker
    .Execute(
      procedure (const value: integer)
      begin
         CalcUnit.EntrySearch(value);
      end);

Form.Close CancelToken.Signal ; 使窗体关闭,线程从"Parallel.ForEach 工作线程"变为"空闲线程工作线程",但线程不会终止。 并且程序挂起。为什么线程不终止?我做错了什么?

您是否在代码中检查 IsSignalled 的 CancelToken?任务不会强制自动终止。相反,您必须在代码中检查取消,并在发出信号时退出任务。

相关内容

  • 没有找到相关文章

最新更新