diff --git a/Src/Asp.Net/SqlServerTest/Demo/Demo1_Queryable.cs b/Src/Asp.Net/SqlServerTest/Demo/Demo1_Queryable.cs index ccabe261f..e2b228faf 100644 --- a/Src/Asp.Net/SqlServerTest/Demo/Demo1_Queryable.cs +++ b/Src/Asp.Net/SqlServerTest/Demo/Demo1_Queryable.cs @@ -197,9 +197,10 @@ namespace OrmTest SqlSugarClient db = GetInstance(); var task1 = db.Queryable().FirstAsync(); + task1.Wait(); var task2 = db.Queryable().Where(it => it.Id == 1).ToListAsync(); - task1.Wait(); + task2.Wait(); Console.WriteLine("#### Async End ####"); diff --git a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj index e1f354862..6e93407cb 100644 --- a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj +++ b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj @@ -140,6 +140,8 @@ + + diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs b/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs index 9e274f9e6..81e32ad6a 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/Main.cs @@ -27,6 +27,8 @@ namespace OrmTest { Json(); Thread(); + Thread2(); + Thread3(); } } } diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UThread.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UThread.cs index d05a4b71f..48bf67da5 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/UThread.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UThread.cs @@ -10,7 +10,7 @@ namespace OrmTest public partial class NewUnitTest { - public static SqlSugarClient tdb0 => new SqlSugarClient(new ConnectionConfig() + public static SqlSugarClient simpleDb => new SqlSugarClient(new ConnectionConfig() { DbType = DbType.SqlServer, ConnectionString = Config.ConnectionString, @@ -25,7 +25,7 @@ namespace OrmTest } } }); - public static SqlSugarClient tdb1 => new SqlSugarClient(new ConnectionConfig() + public static SqlSugarClient ssDb => new SqlSugarClient(new ConnectionConfig() { DbType = DbType.SqlServer, ConnectionString = Config.ConnectionString, @@ -41,7 +41,7 @@ namespace OrmTest } } }); - public static SqlSugarClient tdb2 = new SqlSugarClient(new ConnectionConfig() + public static SqlSugarClient singleDb = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.SqlServer, ConnectionString = Config.ConnectionString, @@ -56,7 +56,7 @@ namespace OrmTest } } }); - public static SqlSugarClient tdb3 = new SqlSugarClient(new ConnectionConfig() + public static SqlSugarClient singleAndSsDb = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.SqlServer, ConnectionString = Config.ConnectionString, @@ -91,7 +91,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb0.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommand(); + simpleDb.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommand(); System.Threading.Thread.Sleep(1); } @@ -100,7 +100,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb0.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommand(); + simpleDb.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommand(); System.Threading.Thread.Sleep(10); } @@ -109,7 +109,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb0.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommand(); + simpleDb.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommand(); System.Threading.Thread.Sleep(6); } @@ -127,7 +127,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb3.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommand(); + singleAndSsDb.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommand(); System.Threading.Thread.Sleep(1); } @@ -136,7 +136,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb3.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommand(); + singleAndSsDb.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommand(); System.Threading.Thread.Sleep(10); } @@ -145,7 +145,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb3.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommand(); + singleAndSsDb.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommand(); System.Threading.Thread.Sleep(6); } @@ -163,7 +163,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb2.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommand(); + singleDb.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommand(); System.Threading.Thread.Sleep(1); } @@ -172,7 +172,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb2.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommand(); + singleDb.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommand(); System.Threading.Thread.Sleep(10); } @@ -181,7 +181,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb2.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommand(); + singleDb.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommand(); System.Threading.Thread.Sleep(6); } @@ -237,7 +237,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb0.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); + simpleDb.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); System.Threading.Thread.Sleep(1); } @@ -246,7 +246,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb0.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); ; + simpleDb.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); ; System.Threading.Thread.Sleep(10); } @@ -255,7 +255,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb0.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); + simpleDb.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); System.Threading.Thread.Sleep(6); } @@ -273,7 +273,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb3.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); + singleAndSsDb.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); System.Threading.Thread.Sleep(1); } @@ -282,7 +282,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb3.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); + singleAndSsDb.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); System.Threading.Thread.Sleep(10); } @@ -291,7 +291,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb3.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); + singleAndSsDb.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); System.Threading.Thread.Sleep(6); } @@ -309,7 +309,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb2.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); + singleDb.Insertable(new Order() { Name = "test", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); System.Threading.Thread.Sleep(1); } @@ -318,7 +318,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb2.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); + singleDb.Insertable(new Order() { Name = "test2", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); System.Threading.Thread.Sleep(10); } @@ -327,7 +327,7 @@ namespace OrmTest { for (int i = 0; i < 100; i++) { - tdb2.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); + singleDb.Insertable(new Order() { Name = "test3", CreateTime = DateTime.Now }).ExecuteCommandAsync().Wait(); System.Threading.Thread.Sleep(6); } diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UThread2.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UThread2.cs new file mode 100644 index 000000000..5fe4c12dd --- /dev/null +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UThread2.cs @@ -0,0 +1,316 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrmTest +{ + public partial class NewUnitTest + { + + public static void Thread2() + { + Simple2(); + IsShardSameThread2(); + Single2(); + SingleAndIsShardSameThread2(); + SimpleAsync2(); + IsShardSameThreadAsync2(); + SingleAsync2(); + SingleAndIsShardSameThreadAsync2(); + + } + + private static void Simple2() + { + var t1 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(1); + } + + }); + var t2 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(10); + } + + }); + var t3 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(6); + } + + }); + t1.Start(); + t2.Start(); + t3.Start(); + + Task.WaitAll(t1, t2, t3); + } + + private static void SingleAndIsShardSameThread2() + { + var t1 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(1); + } + + }); + var t2 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(10); + } + + }); + var t3 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(6); + } + + }); + t1.Start(); + t2.Start(); + t3.Start(); + + Task.WaitAll(t1, t2, t3); + } + + private static void Single2() + { + var t1 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(1); + } + + }); + var t2 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(10); + } + + }); + var t3 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(6); + } + + }); + t1.Start(); + t2.Start(); + t3.Start(); + + Task.WaitAll(t1, t2, t3); + } + + private static void IsShardSameThread2() + { + var t1 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(1); + } + + }); + var t2 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(10); + } + + }); + var t3 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToList(); + System.Threading.Thread.Sleep(6); + } + + }); + t1.Start(); + t2.Start(); + t3.Start(); + + Task.WaitAll(t1, t2, t3); + } + + + + private static void SimpleAsync2() + { + var t1 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(1); + } + + }); + var t2 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); ; + System.Threading.Thread.Sleep(10); + } + + }); + var t3 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(6); + } + + }); + t1.Start(); + t2.Start(); + t3.Start(); + + Task.WaitAll(t1, t2, t3); + } + + private static void SingleAndIsShardSameThreadAsync2() + { + var t1 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(1); + } + + }); + var t2 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(10); + } + + }); + var t3 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(6); + } + + }); + t1.Start(); + t2.Start(); + t3.Start(); + + Task.WaitAll(t1, t2, t3); + } + + private static void SingleAsync2() + { + var t1 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(1); + } + + }); + var t2 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(10); + } + + }); + var t3 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(6); + } + + }); + t1.Start(); + t2.Start(); + t3.Start(); + + Task.WaitAll(t1, t2, t3); + } + + private static void IsShardSameThreadAsync2() + { + var t1 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(1); + } + + }); + var t2 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(10); + } + + }); + var t3 = new Task(() => + { + for (int i = 0; i < 100; i++) + { + simpleDb.Queryable().Take(10).ToListAsync().Wait(); + System.Threading.Thread.Sleep(6); + } + + }); + t1.Start(); + t2.Start(); + t3.Start(); + + Task.WaitAll(t1, t2, t3); + } + } +} diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UThread3.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UThread3.cs new file mode 100644 index 000000000..04794aeba --- /dev/null +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UThread3.cs @@ -0,0 +1,117 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrmTest +{ + public partial class NewUnitTest + { + + public static void Thread3() + { + Console.WriteLine("Thread3"); + SimpleAsync3(); + IsShardSameThreadAsync3(); + SingleAsync3(); + SingleAndIsShardSameThreadAsync3(); + + } + + + + private static async Task SimpleAsync3() + { + + for (int i = 0; i < 100; i++) + { + await simpleDb.Queryable().Take(10).ToListAsync(); + } + + for (int i = 0; i < 100; i++) + { + await simpleDb.Insertable(new Order() { Name = "a", CustomId = 1 }).ExecuteCommandAsync(); + } + + List orders = new List(); + for (int i = 0; i < 100; i++) + { + orders = await simpleDb.Queryable().Take(10).ToListAsync(); + } + if (orders.Count > 0) + { + Console.WriteLine("async is ok"); + } + } + + private static async Task SingleAndIsShardSameThreadAsync3() + { + for (int i = 0; i < 100; i++) + { + await singleAndSsDb.Queryable().Take(10).ToListAsync(); + } + + for (int i = 0; i < 100; i++) + { + await singleAndSsDb.Insertable(new Order() { Name = "a", CustomId = 1 }).ExecuteCommandAsync(); + } + List orders = new List(); + for (int i = 0; i < 100; i++) + { + orders = await singleAndSsDb.Queryable().Take(10).ToListAsync(); + } + if (orders.Count > 0) + { + Console.WriteLine("async is ok"); + } + } + + private static async Task SingleAsync3() + { + for (int i = 0; i < 100; i++) + { + await singleDb.Queryable().Take(10).ToListAsync(); + } + + for (int i = 0; i < 100; i++) + { + await singleDb.Insertable(new Order() { Name = "a", CustomId = 1 }).ExecuteCommandAsync(); + } + + List orders = new List(); + for (int i = 0; i < 100; i++) + { + orders = await singleDb.Queryable().Take(10).ToListAsync(); + } + if (orders.Count > 0) + { + Console.WriteLine("async is ok"); + } + } + + private static async Task IsShardSameThreadAsync3() + { + for (int i = 0; i < 100; i++) + { + await ssDb.Queryable().Take(10).ToListAsync(); + } + + for (int i = 0; i < 100; i++) + { + await ssDb.Insertable(new Order() { Name = "a", CustomId = 1 }).ExecuteCommandAsync(); + } + + List orders = new List(); + for (int i = 0; i < 100; i++) + { + orders = await ssDb.Queryable().Take(10).ToListAsync(); + } + if (orders.Count > 0) + { + Console.WriteLine("async is ok"); + } + } + } +}