4

是否可以以某种方式监控管道任务?我试图像这样为每个任务添加监视器

FPipeline := Parallel.Pipeline()
  .Stage(StageWorker1, Parallel.TaskConfig.MonitorWith(MyMonitor))
     .NumTasks(MaxReadThreadCount)
  .Stage(StageWorker2, Parallel.TaskConfig.MonitorWith(MyMonitor))
  .Run();

但是出现异常“只能使用单个监视器监视任务”(据我了解,发生这种情况是因为已经为管道阶段安装了内部隐藏监视器)。

4

1 回答 1

6

使用 Parallel.TaskConfig.OnMessage 并提供通用的消息处理功能。

FPipeline := Parallel.Pipeline()
  .Stage(StageWorker1, Parallel.TaskConfig.OnMessage(MessageProc))
     .NumTasks(MaxReadThreadCount)
  .Stage(StageWorker2, Parallel.TaskConfig.OnMessage(MessageProc))
  .Run();

procedure MessageProc(var msg: TOmniMessage);
begin
  ...
end;

MessageProc可以是正常程序或方法。

于 2013-08-31T06:00:27.887 回答