Почему OmniThreadLibrary ForEach блокирует основной поток?
Используя OmniThreadLibrary и Delphi XE4, я надеюсь запустить несколько потоков, которые обрабатывают данные в фоновом режиме, добавляя скорость к моему уже существующему коду.
При вызове процедуры, приведенной ниже, графический интерфейс приложения останавливает обработку любого ввода, пока все потоки не завершатся. Я понимаю, что с помощью.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 приветствуются.