我写了一个程序来演示多线程下 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();
}
}