0

我有一种复杂的多阶段过程,需要在后台(我正在使用 OmniThreadLibrary)为文档执行以下阶段,首先在主线程中创建需要执行多个阶段的对象(接口对象) .

在主线程中创建对象后,用户将其发送到处理队列(这是我将其发送到OmniThread Pipeline的位置)并执行以下阶段:

  1. 第 1 阶段)在此文档(本地)上执行一些“昂贵”的计算并将其保存到数据库(使用 IBObjects,我在此阶段创建自己的数据库连接)
  2. 第 2 阶段)将此文档发送到执行一些其他计算的 WebService,将结果保存到数据库(我确保调用 CoInitialize/CoUninitialize)<- 由于 Internet 超时、Web 服务错误、Web 服务,此阶段可能会失败维护窗口等需要处理这些。
  3. 第 3 阶段)生成该文档的 PDF 文件(使用 FastReports)并将其保存到磁盘。
  4. 第 4 阶段)可选 - 通过电子邮件发送此文档。<- 这也可能因 Internet 超时、其他错误等而失败。

从所有 OmniThreadLibrary 抽象(高和低)中,管道是这个特定问题的最佳抽象吗?还是应该只使用低级抽象对队列和阶段进行编程?

其他担忧:

  • 我需要它是一个先进先出队列。
  • ¿ 如何在第 2 和第 4 阶段处理异常(和重试)?
  • ¿ 在主线程中创建对象是个好主意,还是应该在每个阶段实例化数据库对象并从内存中释放它?
  • ¿ 在执行数据库更新时我应该使用锁吗?
  • Pipeline 抽象需要知道我何时完成“添加项目”,但是在我的应用程序生命周期中,用户可以添加从一个到数百个文档,因此我永远不能调用“CompleteAdding”或者¿我应该为每个文档创建一个新管道以过程?

谢谢

4

0 回答 0