【发布时间】:2019-12-19 05:22:05
【问题描述】:
您好首先感谢您对这个问题的关注; 有没有办法在c#中实现这样的事务
using (Transactionscope x=new Transactionscope ())
{
Thead A()=> Independent Transactionscope() A(Insert into table X )
Thead B()=> Independent Transactionscope() B(Insert into table Y )
Thead C()=> Independent Transactionscope() C(Insert into table Z )
Thread.WaitAll(A,B,C)
commit big transaction x/ rollback big transaction x
}
【问题讨论】:
-
在事务中执行的 SQL 命令必须全部针对同一个 SQL 连接执行。因此,将它们分成线程是没有意义的;无论如何都会被连续执行。
-
@JohnWu on .Net Framework,TransactionScope 可用于通过 MS DTC 启动分布式事务,因此无需将所有命令与同一个 Sql Connection 关联。事实上,TransactionScope 可以用于其他 ACID 资源,例如队列或事务文件系统。
-
@StuartLC 有趣又聪明。我没有想到要绑定 MSDTC。问题:如果 OP 对同一个数据库实例中的(子)事务执行此操作,线程是否有可能相互死锁?
-
@JohnWu 是的,DTC 会导致很多与锁定相关的问题,并且通常会降低企业的可扩展性。似乎现在大多数人更喜欢查看有偿交易,或者将事实来源从 RDMS 转移到事件和命令中(Actor Model、Event Sourcing 等)
标签: c# transactionscope