当OTL跟踪仍在使用IOmniCancellationToken时关闭IOmniCancellationToken不会终止线程。使用以下TaskConfiguration代码
私有CancelToken: IOmniCancellationToken;
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 worker”转到“空闲线程工作器”,但线程不会终止。节目就挂了。为什么线程不终止?我做错什么了?
发布于 2014-11-27 13:39:47
您是否在代码中检查CancelToken是否有IsSignalled?任务不会被迫自动终止。相反,您必须在代码中检查是否取消,并在任务发出信号时退出。
https://stackoverflow.com/questions/27171131
复制相似问题