2011-01-07 87 views
0

我遇到了一个与我正在处理的代码有关的问题。我的任务是获取采购订单详细信息的文件。采购订单包含单个项目,每个项目都有其交货时间表。 PO的创建是原子的(全部或全部)。所有这些都是在一次交易下进行的。在工作线程中访问主线程未完成的数据

我已经有了以下子任务的方法。 1. CreatePO 2. CreateItem 3. AddDeliveryScheduleToItem(ItemId)。

当我以顺序方式执行所有这一切都工作正常。顺序时尚意味着我首先创建PO。其次,我在PO中创建所有项目。第三,我将递送计划逐一添加到每个订单项。在这里,交易在创建采购订单之前开始,并在交货计划添加到所有项目后落实。如果有任何错误,应用程序会回滚事务。

将交货计划添加到物料时,我会从数据库中检索物料记录以检索计划详细信息,即如何编写当前代码。

到目前为止这么好。

现在添加delivery schdule是一项非常耗时的任务,因此我们决定添加线程并且同时运行添加交付计划。所以我创建了一个名为AddDeliveryScheduleInThread()的方法,并在此方法中调用AddDeliveryScheduleToItem(ItemId)。

使用ThreadPool我并发地触发AddDeliveryScheduleInThread()。现在,当AddDeliveryScheduleToItem(ItemId)尝试根据项目标识检索项目记录时,会出现问题。请记住,我们在交易的主线程中创建了此项目,但尚未提交。

目前使用Spring.NET事务的代码,我在那里找不到太多的帮助。

如何解决此问题?请帮帮我。

我打算不使用Spring.NET事务。如果可以提供帮助,我正在研究可靠交易和可承诺交易。

感谢

+0

“现在增加交货时间非常耗时” - 您能解释一下吗? – 2011-01-07 16:38:36

+0

除了普通插入之外,还有一些涉及其他问题。因此,它是我们的第一个同时处理整个交易的候选人。主要问题是在多线程模式下,在主线程中创建的项目在将项目添加到项目的工作线程中不可用。 – Henry 2011-01-07 17:27:44

回答

0

AddDeliveryScheduleToItem(项目Id) 尝试检索基于项目标识的项纪录 。请记住,我们在 交易的主线程中创建了 此项,但它尚未提交 。

我只能想到两个选项。

1)在提交事务之前,不要添加DeliveryScheduleToItem(ItemId)。

2)不要把AddDeliveryScheduleToItem(ItemId)放在另一个线程上,而是让它非常快,所以你不必把它放在另一个线程上。

使2速度非常快的简单方法是简单地将其添加到队列中,而不是整个过程。让另一个进程查看该队列,看看是否有新的项目进行计划,然后计划执行长时间运行的位。

相关问题