我正在学习如何在Delphi XE2中使用OmniThreadLibrary,我想知道是否有人可以向我展示如何取消并行的foreach。
我读到应该使用取消标记,但我找不到任何关于如何使用它的例子。
这是函数内部的原始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 不熟悉,不知道如何做,请帮忙 :)