2
使用OmniThreadLibrary和Delphi XE4,我希望运行多个线程来处理后台数据,为我现有的代码增加速度。为什么OmniThreadLibrary的ForEach阻止主线程?
当调用下面的过程时,应用程序GUI将停止处理任何输入,直到所有线程都完成为止。我的理解是,即使线程正在运行,使用.NoWait
也应允许该过程退出。
procedure Test(input: TStringList; output: TList<TMaintFore>);
var
outQueue: IOmniBlockingCollection;
transaction: TOmniValue;
begin
outQueue := TOmniBlockingCollection.Create;
Parallel.ForEach(0, input.Count - 1)
.NoWait
.Into(outQueue)
.Execute(
procedure(const value: integer; var result: TOmniValue)
begin
result := TMaintFore.Create(input[value]);
end
);
end;
我对ForEach循环的理解不正确,提示我应该使用其他方法来实现后台处理?任何关于正确使用OmniThreadLibrary的建议,我都赞赏。
您可以安排在任务完成时收到通知吗? –
回答上面。 – gabr
谢谢。这对我自己的教育来说更是一个问题,因为我看到你在我的支持和呼唤! ;-)但我猜想提问者可能会好奇同样的事情。 –