微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

IOmniPipeline - 第二阶段没有被执行

如何解决IOmniPipeline - 第二阶段没有被执行

我有一个简单的管道实现(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_A 完成后立即执行过程 DoDataTransfer_B。”

不,阶段不必按顺序执行 - 它们可以同时执行,这是使用管道的要点之一。 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;

我怀疑你没有这样做。因此,展示您的编码将是相关的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。