单线程中有多个事务范围?

时间:2016-04-08 19:45:08

标签: c# .net

有没有办法在一个.NET线程中同时打开多个TransactionScope并在它们之间切换?有点像:

var tx1 = new TransactionScope(...);
var tx2 = new TransactionScope(...);

tx1.Use();
// do some database operations on tx1

tx2.Use();
// do some database operations on tx2
tx2.Complete();

tx1.Use();
// do some more database operations on tx1
tx1.Complete();

我想在我的数据库中测试一些并发情况,并且将并发生成器保留在一个线程上将允许我编写更整洁的测试代码:

producer1.DoA(); // must run in txA
producer2.DoB(); // must run in txB
...

1 个答案:

答案 0 :(得分:0)

我现在正在使用替代方法:Task继续操作与TransactionScopeAsyncFlowOption.Enabled结合使用。读起来像一个魅力,并在不同的线程上运行,如测试中的原始主题。

我的测试中的一些伪代码:

Task.Factory
  .StartNew(OpenTx1_Insert1_DoNotCompleteTx1)
  .ContinueWith(OpenTx2_Insert2_CompleteTx2)
  .ContinueWith(Assert_SomeStuff)
  .ContinueWith(CompleteTx1);