Por que o encadeamento principal da OmniThreadLibrary ForEach está bloqueando?
Usando o OmniThreadLibrary eo Delphi XE4, espero executar vários threads que processam dados em segundo plano, adicionando aumento de velocidade ao meu código já existente.
Ao chamar o procedimento abaixo, a GUI do aplicativo para de processar qualquer entrada até que todos os encadeamentos sejam concluídos. Eu entendo que usar.NoWait
deve permitir que o procedimento seja encerrado mesmo quando os encadeamentos estiverem em execução.
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;
Meu entendimento do loop ForEach é incorreto, sugerindo que eu use um método alternativo para obter o processamento em segundo plano? Qualquer sugestão sobre o uso correto da OmniThreadLibrary é apreciada.