通过重新初始化,我的意思是停止正在运行的任务(或者如果必须的话甚至终止线程)并恢复,就好像管道/线程从未初始化/启动一样。
我的代码(我使用的是delphi 2010,OmniThreadLibrary 3.02)如下所示:
procedure SomeProc();
var
AFile : TOmniValue;
begin
APipeline := Parallel.Pipeline.NumTasks(5).Stage(StageProc).Run;
AFile.CreateNamed(['FileID', FileID, 'FileName', FileName]);
MyPipeline.Input.Add(AFile);
end;
// --------------- //
procedure StageProc(const Input, Output : IOmniBlockingCollection; const Task : IOmniTask);
begin
// ...
end;
我需要这样的东西:
// --------------- //
procedure ResetPipeline();
begin
// Stop any task running inside StageProc() & reset pipeline, ie.
KillTasks(pipeline);
pipeline := nil;
end;
笔记
FWIW,是的,我完全知道这确实是个坏主意!
我也很清楚,最好的方法是向任务发送停止信号并等待它们很好地关闭,并经常检查任务内的停止信号。对于这个非常特殊的情况,我对此不感兴趣。
虽然上面的代码只提到了管道,但重置 BackgroundWorker 的解决方案对我来说就足够了。
提前致谢!