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
謝謝。這對我自己的教育來說更是一個問題,因爲我看到你在我的支持和呼喚! ;-)但我猜想提問者可能會好奇同樣的事情。 –