【发布时间】:2021-06-05 15:11:52
【问题描述】:
我有一个简单的管道 (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 失败了,谁知道呢?
-
@whosrdaddy 我可以确认
DoDataTransfer_A程序正在正确完成,因为它已在内部登录,并且我看到它正在完全执行。我已更新问题以添加 2 个过程的方法签名。 -
我猜你的问题是你失去了对阶段A中间管道的引用,这导致它在阶段A完成后销毁,因此不会继续阶段B。是
OmniPipelinea某些过程的局部变量?尝试在退出过程之前输入OmniPipeline.WaitFor(INFINITE);。
标签: delphi delphi-10.2-tokyo omnithreadlibrary