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 }
  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/dreamman/p/14840953.html
Copyright © 2011-2022 走看看