gpt4 book ai didi

c# - 两个并行的 TransactionScope,每个都有自己的连接

转载 作者:行者123 更新时间:2023-11-30 15:46:18 25 4
gpt4 key购买 nike

我正在尝试弄清楚 TransactionScope 如何与代表不同交易场景的示例代码一起工作...
当我有 2 个并发的 TransactionScopes 每个都有自己的连接时,你能解释一下 date 实际发生了什么吗?就像在这个示例代码中一样:

internal class Program
{
private const int Count = 20;
private static readonly Random Random = new Random();

private static void Main(string[] args)
{
var task1 = new Task(Task1);
var task2 = new Task(Task2);
task1.Start();
task2.Start();
Console.ReadLine();
}
private static void Task1()
{
var connection = new EntityConnection("name=ModelContainer");
using (var transaction = new TransactionScope())
{
DoWork(connection);
transaction.Complete();
}
}
private static void Task2()
{
var connection = new EntityConnection("name=ModelContainer");
using (var transaction = new TransactionScope())
{
DoWork(connection);
transaction.Complete();
}
}
private static void DoWork(EntityConnection connection)
{
connection.Open();
using (var context = new ModelContainer(connection))
{
List<SyncData> list = context.SyncDataSet.ToList();
for (int i = 0; i < Count; i++)
{
list[i].Knowledge.Version = Random.Next(200);
context.SaveChanges();
}
}
}
}

最佳答案

嵌套(并且在同一线程上)的事务范围成为同一事务的一部分(外部事务是完成的定义范围)——如果需要,升级到 DTC。在您的情况下,交易似乎没有嵌套,因此它们是不相关的。这也应该意味着 LTM 而不是 DTC 是所有者,它的开销更少。

因此,当然,如果它们接触相同的数据,您可能需要注意它们之间的阻塞等。特别是因为事务范围默认为可序列化隔离。

关于c# - 两个并行的 TransactionScope,每个都有自己的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com