我正在学习如何在 Delphi XE2 中使用 OmniThreadLibrary,我想知道是否有人可以告诉我如何取消 parallel.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 的新手,我不知道该怎么做,请帮助我:)