Delphi XE2 で OmniThreadLibrary を使用する方法を学んでいます。
キャンセル トークンを使用する必要があると読みましたが、その使用方法に関する例が見つかりません。
これは、関数内の元の for ループです。
function SomeFunction() : string;
begin
for value := 0 to length(listOfThings)-1 do
begin
Chain := Function1( listOfThings[value] );
if Evaluate( Chain , Solution) then
Parameters[value] := Solution
else
begin
Result := 'ERROR';
exit;
end;
end;
end;
そして、これが私が Parallel.ForEach を使用している方法です
function SomeFunction() : string;
begin
Parallel.ForEach(0, length(listOfThings)-1 ).Execute(
procedure (const value: integer)
var Chain : string;
begin
Chain := Function1(listOfThings[value]);
if Evaluate(Chain , Solution) then
Parameters[value] := Solution
else
begin
Result := 'ERROR'; //Here is where it won't work
exit;
end;
end
);
end;
Parallel.ForEach の内部は、プロシージャ内でキャプチャされていないため実行できません。Result := 'ERROR'
そのため、Parallel.ForEach をキャンセルしてそのキャンセルを報告できれば、Result := 'ERROR'
外部に割り当てるだけでよいと思います。
しかし、私は OmniThreadLibrary を初めて使用し、そのようなことを行う方法がわかりません。助けてください :)