首页 > Web开发 > 详细

.net 事务死锁测试

时间:2021-06-02 15:45:29      阅读:11      评论:0      收藏:0      [点我收藏+]
 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 }

 

.net 事务死锁测试

原文:https://www.cnblogs.com/dreamman/p/14840953.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!