我有一种复杂的多阶段过程,需要在后台执行以下阶段(我使用的是OmniThreadLibrary)作为文档,首先在主线程中创建我需要的对象(interfaced对象)执行几个阶段。
在主线程中创建对象后,用户将其发送到处理队列(这是我将其发送到OmniThread Pipeline的位置)并执行以下阶段:
- 阶段1)对此文档执行一些“昂贵的”计算(本地)并将其保存到数据库中(使用IBObjects,我在此阶段创建自己的数据库连接)
- 阶段2)将此文档发送到WebService,后者对其执行一些其他计算,将结果保存到数据库中(我确保调用CoInitialize / CoUninitialize)< - 此阶段可能会失败由于互联网超时,网络服务错误,网络服务维护窗口等需要处理这些。
- 阶段3)生成此文档的PDF文件(使用FastReports)并将其保存到磁盘。
- 阶段4)可选 - 通过电子邮件发送此文档。 < - 这也可能因网络超时,其他错误等而失败。
醇>
从所有OmniThreadLibrary抽象(高和低)中,Pipeline是这个特定问题的最佳抽象?或者我应该使用低级抽象来编写队列和阶段吗?
其他问题:
- 我需要它作为FIFO队列。
- ¿如何处理第2和第4阶段的异常(和重试)?
- ¿在主线程中创建对象是一个好主意,还是应该在每个阶段实例化数据库对象并将其从内存中释放出来?
- ¿我应该在执行数据库更新时使用锁吗?
- 管道抽象需要知道我什么时候完成“添加项目”,但是在我的应用程序生命周期中,用户可以添加一到几百个文档,这样我就永远不能调用“CompleteAdding”或者“我应该创建一个新的管道要处理的每个文件?
由于