IOmniPipeline - 第二阶段未执行
IOmniPipeline - 2nd stage is not getting executed
我有一个简单的管道 (IOmniPipeline) 实现,但是添加的第二阶段没有被执行。
代码如下:
var
OmniPipeline: IOmniPipeline;
begin
OmniPipeline := Parallel.Pipeline;
OmniPipeline.Stage(DoDataTransfer_A);
OmniPipeline.Stage(DoDataTransfer_B); // <---- This stage is not being executed!
OmniPipeline.OnStop(DataTransferCompleteEvent).Run;
OmniPipeline.input.Add(nil);
OmniPipeline.input.CompleteAdding;
procedure DoDataTransfer_A(const input: TOmniValue; var output: TOmniValue);
begin
//some code here
end;
procedure DoDataTransfer_B(const input: TOmniValue; var output: TOmniValue);
begin
//some code here
end;
我希望过程DoDataTransfer_B
应该在DoDataTransfer_A
完成后立即执行(这些方法的实现很简单,我没有将它们包含在问题中)。
如果您能指出问题所在以及如何解决,我将不胜感激。
“我希望过程 DoDataTransfer_B 应该在 DoDataTransfer_A 完成后立即执行。”
不,阶段不必按顺序执行 - 它们可以同时执行,这是使用管道的要点之一。 DoDataTransfer_B 将在您向其传递输入后立即执行,即:
procedure DoDataTransfer_A(const input: TOmniValue; var output: TOmniValue);
var
InputItem: TOmniValue;
begin
....
Output.Add(InputItem); // InputItem could be input param directly, or any other input
end;
我怀疑你没有那样做。因此,显示您的编码是相关的。
我有一个简单的管道 (IOmniPipeline) 实现,但是添加的第二阶段没有被执行。
代码如下:
var
OmniPipeline: IOmniPipeline;
begin
OmniPipeline := Parallel.Pipeline;
OmniPipeline.Stage(DoDataTransfer_A);
OmniPipeline.Stage(DoDataTransfer_B); // <---- This stage is not being executed!
OmniPipeline.OnStop(DataTransferCompleteEvent).Run;
OmniPipeline.input.Add(nil);
OmniPipeline.input.CompleteAdding;
procedure DoDataTransfer_A(const input: TOmniValue; var output: TOmniValue);
begin
//some code here
end;
procedure DoDataTransfer_B(const input: TOmniValue; var output: TOmniValue);
begin
//some code here
end;
我希望过程DoDataTransfer_B
应该在DoDataTransfer_A
完成后立即执行(这些方法的实现很简单,我没有将它们包含在问题中)。
如果您能指出问题所在以及如何解决,我将不胜感激。
“我希望过程 DoDataTransfer_B 应该在 DoDataTransfer_A 完成后立即执行。”
不,阶段不必按顺序执行 - 它们可以同时执行,这是使用管道的要点之一。 DoDataTransfer_B 将在您向其传递输入后立即执行,即:
procedure DoDataTransfer_A(const input: TOmniValue; var output: TOmniValue);
var
InputItem: TOmniValue;
begin
....
Output.Add(InputItem); // InputItem could be input param directly, or any other input
end;
我怀疑你没有那样做。因此,显示您的编码是相关的。