zoukankan      html  css  js  c++  java
  • .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 }
  • 相关阅读:
    20190318-使用类做一个简单的图书馆管理系统
    20190313-面向对象的简单理解
    20190313-时间和日期-Time
    20190305-leetcode题目有效的括号
    20190227-做一个简易代码统计工具
    20190226-利用序列化完成小型记账程序
    20190221-文件操作
    20190131-文件操作命题练习
    Excel技巧—如何从重复行中取某一行
    Excel技巧—轻松搞定多级联动下拉列表
  • 原文地址:https://www.cnblogs.com/dreamman/p/14840953.html
Copyright © 2011-2022 走看看