我编写了一个程序来演示多线程 DTC 超时的行为。我有几个例外,似乎是随机的。是所有这些简单的超时,还是其中一些表示更深层次的问题(连接池交互等)?
Microsoft 分布式事务协调器 (MS DTC) 已取消分布式事务。
分布式事务完成。在新事务或 NULL 事务中登记此会话。
与当前连接关联的事务已完成但尚未处置。必须先处理事务,然后才能使用连接执行 SQL 语句。
该操作对事务的状态无效。
ExecuteReader 需要一个打开且可用的连接。连接的当前状态为关闭。
这是代码的数据部分:
using (DemoDataDataContext dc1 = new DemoDataDataContext(Conn1))
using (DemoDataDataContext dc2 = new DemoDataDataContext(Conn2))
{
WriteMany(dc1, 100); //generate 100 records for insert
WriteMany(dc2, 100000); //generate 100,000 records for insert
Console.WriteLine("{0} : {1}", Name, " generated records for insert.");
using (TransactionScope ts = new TransactionScope())
{
dc1.SubmitChanges();
dc2.SubmitChanges();
ts.Complete();
}
}