.net 事务死锁测试

复制代码
 1 [TestInitialize]
 2 public void Initialize()
 3 {
 4     //Mis系统配置
 5     Util6.Information.Config.CoreConfig.Initialize("Default");
 6     IocHelper.Register<MisConfig>(() => CoreConfig.GetConfigInfo<MisConfig>(new MisSettingService().FindList()), true);
 7      8 }
 9          
10         
11 [TestMethod]
12 public void TestDeadLock()
13 {
14     var tasks = new System.Collections.Generic.List<System.Threading.Tasks.Task>();            
15     for (int j = 0; j < 10; j++)
16     {
17         tasks.Add(System.Threading.Tasks.Task.Factory.StartNew((obj) =>
18         {
19             var storage = new Util6.Information.Repositorys.MisRepositoryStorage();
20             using (var db = new DbBuilder(CoreConfig.WriteConfig).KeepConnect())
21             {
22                 try
23                 {
24                     db.BeginTransaction();
25                     var log = storage.MisLogVisit.UseDatabase(db).Query(m => m.ID == 2).ToEntity();
26                     storage.MisLogVisit.SetEntity(log);
27                     log.Oper = "456" + obj;
28                     storage.MisLogVisit.UseDatabase(db).Update();
29                     //死锁异常
30                     //var logInfo = storage.MisLogVisit.UseDatabase(null).Query().ToCount();
31                     //没有在锁定行查询则没有问题
32                     //var logInfo = storage.MisLogVisit.UseDatabase(null).Query(m=>m.ID != 2).ToCount();
33                     //用事务连接的对象则没有问题
34                     var logInfo = storage.MisLogVisit.UseDatabase(db).Query().ToCount();
35                     db.CommitTransaction();
36                 }
37                 catch (Exception ex)
38                 {
39                     Console.WriteLine(ex.ToString());
40                     db.RollbackTransaction();
41                 }
42             }
43         }, j));
44         tasks.Add(System.Threading.Tasks.Task.Factory.StartNew((obj) =>
45         {
46             var storage = new Util6.Information.Repositorys.MisRepositoryStorage();
47             //事务外不会引起死锁异常
48             var logInfo = storage.MisLogVisit.Query().ToCount();
49             System.Threading.Thread.Sleep(1);
50         }, j));
51     }
52     System.Threading.Tasks.Task.WaitAll(tasks.ToArray());
53     Console.WriteLine("end");
54 }
复制代码

 

posted @   优六系统(Util6MIS+)  阅读(112)  评论(0)    收藏  举报
编辑推荐:
· 日常问题排查-空闲一段时间再请求就超时
· Java虚拟机代码是如何一步一步变复杂且难以理解的?
· 领域驱动的事实与谬误 一 DDD 与 MVC
· SQL Server 2025 中的改进
· 当数据爆炸遇上SQL Server:优化策略全链路解析
阅读排行:
· 日常问题排查-空闲一段时间再请求就超时
· C# 14 新增功能一览,你觉得实用吗?
· 揭秘 AI 工具的系统提示词「GitHub 热点速览」
· MySQL同步ES的6种方案!
· 解密AI知识库
点击右上角即可分享
微信分享提示