【发布时间】:2011-01-07 16:36:44
【问题描述】:
我正在处理的代码遇到一个问题。任务是我得到一个包含采购订单详细信息的文件。采购订单有单独的项目,每个项目都有其交货计划。 PO 的创建是原子的(全有或全无)。所以所有这些都在一个事务下运行。
我已经有以下子任务的方法。 1.创建PO 2. 创建项目 3. AddDeliveryScheduleToItem(ItemId)。
当我以顺序方式执行所有这些操作时,一切正常。顺序时尚意味着首先我创建 PO。其次,我将PO下的所有项目一一创建。第三,我将交付计划一一添加到每个订单项。此处,事务在创建 PO 之前开始,并在将交付计划添加到所有项目之后提交。如果有任何错误,应用程序会回滚事务。
在将交付计划添加到项目时,我确实从数据库中检索项目记录以检索计划详细信息,这就是当前代码的编写方式。
到目前为止一切顺利。
现在添加交付计划是一项耗时的任务,因此我们决定添加线程并并行运行添加交付计划。所以我创建了一个名为 AddDeliveryScheduleInThread() 的方法,并在该方法中调用 AddDeliveryScheduleToItem(ItemId)。
使用 ThreadPool 我并行触发 AddDeliveryScheduleInThread()。现在,当 AddDeliveryScheduleToItem(ItemId) 尝试根据项目 ID 检索项目记录时,就会出现问题。请记住,我们在事务的主线程中创建了此项目,但尚未提交。
当前使用 Spring.NET 事务的代码,我在那里找不到太多帮助。
如何解决这个问题?请帮我。
我愿意不使用 Spring.NET 事务。如果有帮助,我现在正在研究 Dependable Transaction 和 Commitable Transaction。
谢谢
【问题讨论】:
-
“现在添加交付时间表是一项耗时的任务” - 你能解释一下吗?
-
除了简单的插入之外,还涉及一些计算和其他事情。因此,它是我们第一个并行处理以更快地处理整个事务的候选者。主要问题是在多线程模式下,在主线程中创建的项目在将计划添加到项目的工作线程中不可用。
-
为什么不在一个线程上运行整个歌曲和舞蹈?
-
它在单线程上运行良好,但性能很慢。借助多线程,我们可以提高性能。
标签: .net multithreading transactions