From 91641770d3eb584784756ad36b41d8192b5b67ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=9F=B3=E5=A4=B4?= Date: Sat, 30 Nov 2024 22:49:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BA=E4=BA=86=E6=8F=90=E5=8D=87=E6=80=A7?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E5=9C=A8=E5=90=8C=E6=AD=A5=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E6=97=B6=E8=A7=84=E9=81=BF=E5=8D=A1UI?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E6=96=87=EF=BC=8C=E6=89=80=E6=9C=89await?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9C=BA=E9=83=BD=E8=AE=BE=E7=BD=AEConfigure?= =?UTF-8?q?Await(false)=EF=BC=8C=E5=BC=80=E5=90=AFCA2007=E5=B9=B6=E8=A7=86?= =?UTF-8?q?=E4=B8=BA=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- XCode/DataAccessLayer/Common/DbBase.cs | 2 +- XCode/DataAccessLayer/Common/DbSession.cs | 14 ++++++------- XCode/DataAccessLayer/DAL_DbOperate.cs | 8 ++++---- XCode/DataAccessLayer/DAL_Mapper.cs | 4 ++-- XCode/DataAccessLayer/Database/DB2.cs | 4 ++-- XCode/DataAccessLayer/Database/DaMeng.cs | 6 +++--- XCode/DataAccessLayer/Database/Oracle.cs | 8 ++++---- XCode/DataAccessLayer/DbPackage.cs | 2 +- XCode/Entity/Entity.cs | 24 +++++++++++------------ XCode/Entity/EntityFactory.cs | 2 +- XCode/Entity/EntitySession.cs | 2 +- XCode/Entity/IEntityPersistence.cs | 8 ++++---- XCode/XCode.csproj | 4 +++- XUnitTest.XCode/XUnitTest.XCode.csproj | 2 +- 14 files changed, 46 insertions(+), 44 deletions(-) diff --git a/XCode/DataAccessLayer/Common/DbBase.cs b/XCode/DataAccessLayer/Common/DbBase.cs index 769a73281..6be9b9527 100755 --- a/XCode/DataAccessLayer/Common/DbBase.cs +++ b/XCode/DataAccessLayer/Common/DbBase.cs @@ -393,7 +393,7 @@ public virtual async Task OpenConnectionAsync() var conn = Factory.CreateConnection(); conn.ConnectionString = GetConnectionString(); - await conn.OpenAsync(); + await conn.OpenAsync().ConfigureAwait(false); return conn; } diff --git a/XCode/DataAccessLayer/Common/DbSession.cs b/XCode/DataAccessLayer/Common/DbSession.cs index 7aadd0ae3..d4c49642e 100644 --- a/XCode/DataAccessLayer/Common/DbSession.cs +++ b/XCode/DataAccessLayer/Common/DbSession.cs @@ -157,8 +157,8 @@ public virtual async Task ProcessAsync(Func ProcessAsync(Func> cal { try { - return await callback(); + return await callback().ConfigureAwait(false); } catch (Exception ex) { @@ -584,9 +584,9 @@ public virtual Task QueryAsync(String sql, IDataParameter[]? ps) using var cmd = OnCreateCommand(sql, CommandType.Text, ps); return ExecuteAsync(cmd, true, async cmd2 => { - using var dr = await cmd2.ExecuteReaderAsync(); + using var dr = await cmd2.ExecuteReaderAsync().ConfigureAwait(false); var dt = new DbTable(); - await dt.ReadAsync(dr); + await dt.ReadAsync(dr).ConfigureAwait(false); return dt; }); } @@ -650,7 +650,7 @@ public virtual Task InsertAndGetIdentityAsync(String sql, CommandType typ return ExecuteAsync(cmd, false, async cmd2 => { - var rs = await cmd.ExecuteScalarAsync(); + var rs = await cmd.ExecuteScalarAsync().ConfigureAwait(false); if (rs == null || rs == DBNull.Value) return 0; return Reflect.ChangeType(rs); @@ -668,7 +668,7 @@ public virtual Task InsertAndGetIdentityAsync(String sql, CommandType typ using var cmd = OnCreateCommand(sql, type, ps); return ExecuteAsync(cmd, true, async cmd2 => { - var rs = await cmd.ExecuteScalarAsync(); + var rs = await cmd.ExecuteScalarAsync().ConfigureAwait(false); if (rs == null || rs == DBNull.Value) return default; if (rs is T t) return t; diff --git a/XCode/DataAccessLayer/DAL_DbOperate.cs b/XCode/DataAccessLayer/DAL_DbOperate.cs index 115eb5190..4a28a34b0 100644 --- a/XCode/DataAccessLayer/DAL_DbOperate.cs +++ b/XCode/DataAccessLayer/DAL_DbOperate.cs @@ -484,7 +484,7 @@ private async Task QueryAsyncWrap(T1 k1, T2 k2, T3 // 读写分离 if (Strategy != null && Strategy.TryGet(this, k1 + "", action, out var rd) && rd != null) { - return await rd.QueryAsyncWrap(k1, k2, k3, callback, action); + return await rd.QueryAsyncWrap(k1, k2, k3, callback, action).ConfigureAwait(false); } //CheckDatabase(); @@ -509,7 +509,7 @@ private async Task QueryAsyncWrap(T1 k1, T2 k2, T3 } Interlocked.Increment(ref _QueryTimes); - var rs = await InvokeAsync(AsyncSession, k1, k2, k3, callback, action); + var rs = await InvokeAsync(AsyncSession, k1, k2, k3, callback, action).ConfigureAwait(false); cache?.Set(key, rs, Expire); @@ -525,7 +525,7 @@ private async Task ExecuteAsyncWrap(T1 k1, T2 k2, //CheckDatabase(); - var rs = await InvokeAsync(AsyncSession, k1, k2, k3, callback, action); + var rs = await InvokeAsync(AsyncSession, k1, k2, k3, callback, action).ConfigureAwait(false); GetCache()?.Clear(); @@ -554,7 +554,7 @@ private async Task InvokeAsync(IAsyncDbSession ses using var span = tracer?.NewSpan(traceName, sql); try { - var rs = await callback(session, k1, k2, k3); + var rs = await callback(session, k1, k2, k3).ConfigureAwait(false); AppendTag(span, sql, rs, action); return rs; diff --git a/XCode/DataAccessLayer/DAL_Mapper.cs b/XCode/DataAccessLayer/DAL_Mapper.cs index cb0f30c27..eeddec907 100755 --- a/XCode/DataAccessLayer/DAL_Mapper.cs +++ b/XCode/DataAccessLayer/DAL_Mapper.cs @@ -105,7 +105,7 @@ public async Task> QueryAsync(String sql, Object? param = null { if (IsValueTuple(typeof(T))) throw new InvalidOperationException($"不支持ValueTuple类型[{typeof(T).FullName}]"); - var dt = await QueryAsyncWrap(sql, param, "", (ss, s, p, k3) => ss.QueryAsync(s, Db.CreateParameters(p)), nameof(QueryAsync)); + var dt = await QueryAsyncWrap(sql, param, "", (ss, s, p, k3) => ss.QueryAsync(s, Db.CreateParameters(p)), nameof(QueryAsync)).ConfigureAwait(false); // 优先特殊处理基础类型,选择第一字段 var type = typeof(T); @@ -121,7 +121,7 @@ public async Task> QueryAsync(String sql, Object? param = null /// Sql语句 /// 参数对象 /// - public async Task QuerySingleAsync(String sql, Object? param = null) => (await QueryAsync(sql, param)).FirstOrDefault(); + public async Task QuerySingleAsync(String sql, Object? param = null) => (await QueryAsync(sql, param).ConfigureAwait(false)).FirstOrDefault(); private static Boolean IsValueTuple(Type type) { diff --git a/XCode/DataAccessLayer/Database/DB2.cs b/XCode/DataAccessLayer/Database/DB2.cs index 6378779f0..01ff38f64 100644 --- a/XCode/DataAccessLayer/Database/DB2.cs +++ b/XCode/DataAccessLayer/Database/DB2.cs @@ -366,12 +366,12 @@ public override async Task InsertAndGetIdentityAsync(String sql, CommandT BeginTransaction(IsolationLevel.Serializable); try { - Int64 rs = await ExecuteAsync(sql, type, ps); + Int64 rs = await ExecuteAsync(sql, type, ps).ConfigureAwait(false); if (rs > 0) { var m = reg_SEQ.Match(sql); if (m != null && m.Success && m.Groups != null && m.Groups.Count > 0) - rs = await ExecuteScalarAsync($"Select {m.Groups[1].Value}.currval From dual"); + rs = await ExecuteScalarAsync($"Select {m.Groups[1].Value}.currval From dual").ConfigureAwait(false); } Commit(); return rs; diff --git a/XCode/DataAccessLayer/Database/DaMeng.cs b/XCode/DataAccessLayer/Database/DaMeng.cs index 41e9d59c2..bf8edd631 100644 --- a/XCode/DataAccessLayer/Database/DaMeng.cs +++ b/XCode/DataAccessLayer/Database/DaMeng.cs @@ -249,14 +249,14 @@ public override async Task InsertAndGetIdentityAsync(String sql, CommandT BeginTransaction(IsolationLevel.Serializable); try { - Int64 rs = await ExecuteAsync(sql, type, ps); + Int64 rs = await ExecuteAsync(sql, type, ps).ConfigureAwait(false); if (rs > 0) { var m = reg_SEQ.Match(sql); if (m != null && m.Success && m.Groups != null && m.Groups.Count > 0) - rs = await ExecuteScalarAsync($"Select {m.Groups[1].Value}.currval From dual"); + rs = await ExecuteScalarAsync($"Select {m.Groups[1].Value}.currval From dual").ConfigureAwait(false); else - rs = await ExecuteScalarAsync("Select @@Identity"); + rs = await ExecuteScalarAsync("Select @@Identity").ConfigureAwait(false); } Commit(); return rs; diff --git a/XCode/DataAccessLayer/Database/Oracle.cs b/XCode/DataAccessLayer/Database/Oracle.cs index bc55eab82..f290beffc 100644 --- a/XCode/DataAccessLayer/Database/Oracle.cs +++ b/XCode/DataAccessLayer/Database/Oracle.cs @@ -484,10 +484,10 @@ public override Task QueryAsync(String sql, IDataParameter[]? ps) using var cmd = OnCreateCommand(sql, CommandType.Text, ps); return ExecuteAsync(cmd, true, async cmd2 => { - using var dr = await cmd2.ExecuteReaderAsync(); + using var dr = await cmd2.ExecuteReaderAsync().ConfigureAwait(false); var dt = new DbTable(); dt.ReadHeader(dr); - await dt.ReadDataAsync(dr, GetFields(dt, dr)); + await dt.ReadDataAsync(dr, GetFields(dt, dr)).ConfigureAwait(false); return dt; }); } @@ -497,12 +497,12 @@ public override async Task InsertAndGetIdentityAsync(String sql, CommandT BeginTransaction(IsolationLevel.Serializable); try { - Int64 rs = await ExecuteAsync(sql, type, ps); + Int64 rs = await ExecuteAsync(sql, type, ps).ConfigureAwait(false); if (rs > 0) { var m = reg_SEQ.Match(sql); if (m != null && m.Success && m.Groups != null && m.Groups.Count > 0) - rs = await ExecuteScalarAsync($"Select {m.Groups[1].Value}.currval From dual"); + rs = await ExecuteScalarAsync($"Select {m.Groups[1].Value}.currval From dual").ConfigureAwait(false); } Commit(); return rs; diff --git a/XCode/DataAccessLayer/DbPackage.cs b/XCode/DataAccessLayer/DbPackage.cs index d21b05aa6..369111148 100644 --- a/XCode/DataAccessLayer/DbPackage.cs +++ b/XCode/DataAccessLayer/DbPackage.cs @@ -725,7 +725,7 @@ protected override async Task ReceiveAsync(ActorContext context, CancellationTok else dt.WriteData(bn); - await Stream.FlushAsync(); + await Stream.FlushAsync(cancellationToken).ConfigureAwait(false); } } diff --git a/XCode/Entity/Entity.cs b/XCode/Entity/Entity.cs index 253452c95..6a2a2d9be 100644 --- a/XCode/Entity/Entity.cs +++ b/XCode/Entity/Entity.cs @@ -1156,7 +1156,7 @@ public static DbTable FindData(Expression where, String order, String selects, I // 优待主键查询 if (where is FieldExpression fe && fe.Field != null && fe.Field.PrimaryKey) max = 0; - var list = await FindAllAsync(where, null, null, 0, max); + var list = await FindAllAsync(where, null, null, 0, max).ConfigureAwait(false); return list.Count <= 0 ? null : list[0]; } @@ -1257,7 +1257,7 @@ public static async Task> FindAllAsync(Expression where, String? var start = (Int32)(count - (startRowIndex + maximumRows)); var builder2 = CreateBuilder(where, order2, selects); - var list = LoadData(await session.QueryAsync(builder2, start, max)); + var list = LoadData(await session.QueryAsync(builder2, start, max).ConfigureAwait(false)); if (list.Count <= 0) return list; // 如果正在使用单对象缓存,则批量进入 @@ -1276,7 +1276,7 @@ public static async Task> FindAllAsync(Expression where, String? if (shards == null || shards.Length == 0) { var builder = CreateBuilder(where, order, selects); - var list2 = LoadData(await session.QueryAsync(builder, startRowIndex, maximumRows)); + var list2 = LoadData(await session.QueryAsync(builder, startRowIndex, maximumRows).ConfigureAwait(false)); // 如果正在使用单对象缓存,则批量进入 if (selects.IsNullOrEmpty() || selects == "*") LoadSingleCache(list2); @@ -1307,7 +1307,7 @@ public static async Task> FindAllAsync(Expression where, String? var builder = CreateBuilder(where, order, selects); builder.Table = session.FormatedTableName; - var list2 = LoadData(await session.QueryAsync(builder, row, max)); + var list2 = LoadData(await session.QueryAsync(builder, row, max).ConfigureAwait(false)); if (list2.Count > 0) rs.AddRange(list2); // 总数已满足要求,返回 @@ -1315,7 +1315,7 @@ public static async Task> FindAllAsync(Expression where, String? // 避免最后一张表没有查询到相关数据还继续进行查询,减少不必要查询 var skipCount = 0; - if (i < shards.Length) skipCount = (Int32)await session.QueryCountAsync(builder); + if (i < shards.Length) skipCount = (Int32)await session.QueryCountAsync(builder).ConfigureAwait(false); max -= list2.Count; // 后边表索引记录数应该是减去前张表查询出来的记录总数,有可能负数 @@ -1334,7 +1334,7 @@ public static async Task> FindAllAsync(Expression where, String? /// public static async Task> FindAllAsync(Expression where, PageParameter? page = null, String? selects = null) { - if (page == null) return await FindAllAsync(where, null, selects, 0, 0); + if (page == null) return await FindAllAsync(where, null, selects, 0, 0).ConfigureAwait(false); // 页面参数携带进来的扩展查询 if (page.State is Expression exp) @@ -1355,7 +1355,7 @@ public static async Task> FindAllAsync(Expression where, PagePara if (where.IsEmpty && session.LongCount > 100_000) rows = session.LongCount; else - rows = await FindCountAsync(where, null, selects, 0, 0); + rows = await FindCountAsync(where, null, selects, 0, 0).ConfigureAwait(false); if (rows <= 0) return new List(); page.TotalCount = rows; @@ -1367,9 +1367,9 @@ public static async Task> FindAllAsync(Expression where, PagePara // 采用起始行还是分页 IList list; if (page.StartRow >= 0) - list = await FindAllAsync(where, orderby, selects, page.StartRow, page.PageSize); + list = await FindAllAsync(where, orderby, selects, page.StartRow, page.PageSize).ConfigureAwait(false); else - list = await FindAllAsync(where, orderby, selects, (page.PageIndex - 1) * page.PageSize, page.PageSize); + list = await FindAllAsync(where, orderby, selects, (page.PageIndex - 1) * page.PageSize, page.PageSize).ConfigureAwait(false); if (list.Count == 0) return list; @@ -1380,7 +1380,7 @@ public static async Task> FindAllAsync(Expression where, PagePara ) { var selectStat = Meta.Factory.SelectStat; - if (!selectStat.IsNullOrEmpty()) page.State = (await FindAllAsync(where, null, selectStat)).FirstOrDefault(); + if (!selectStat.IsNullOrEmpty()) page.State = (await FindAllAsync(where, null, selectStat).ConfigureAwait(false)).FirstOrDefault(); } return list; @@ -1421,7 +1421,7 @@ public static async Task FindCountAsync(Expression where, String? order = // 自动分表 var shards = Meta.InShard || where == null ? null : Meta.ShardPolicy?.Shards(where); - if (shards == null || shards.Length == 0) return await session.QueryCountAsync(builder); + if (shards == null || shards.Length == 0) return await session.QueryCountAsync(builder).ConfigureAwait(false); var rs = 0L; foreach (var shard in shards) @@ -1435,7 +1435,7 @@ public static async Task FindCountAsync(Expression where, String? order = session = EntitySession.Create(connName, tableName); builder.Table = session.FormatedTableName; - rs += await session.QueryCountAsync(builder); + rs += await session.QueryCountAsync(builder).ConfigureAwait(false); } return rs; } diff --git a/XCode/Entity/EntityFactory.cs b/XCode/Entity/EntityFactory.cs index 51711823f..066688160 100644 --- a/XCode/Entity/EntityFactory.cs +++ b/XCode/Entity/EntityFactory.cs @@ -212,7 +212,7 @@ public static async Task InitAllAsync() if (span != null) span.Value++; } - await Task.WhenAll(ts); + await Task.WhenAll(ts).ConfigureAwait(false); } catch (Exception ex) { diff --git a/XCode/Entity/EntitySession.cs b/XCode/Entity/EntitySession.cs index 0ac1ce0a7..a9a919426 100644 --- a/XCode/Entity/EntitySession.cs +++ b/XCode/Entity/EntitySession.cs @@ -899,7 +899,7 @@ public virtual async Task InsertAsync(IEntity entity) { if (DataTable.IsView) throw new NotSupportedException("视图无法添删改!"); - var rs = await Factory.Persistence.InsertAsync(this, entity); + var rs = await Factory.Persistence.InsertAsync(this, entity).ConfigureAwait(false); var e = entity as TEntity; diff --git a/XCode/Entity/IEntityPersistence.cs b/XCode/Entity/IEntityPersistence.cs index aeecd3733..afd8536cc 100644 --- a/XCode/Entity/IEntityPersistence.cs +++ b/XCode/Entity/IEntityPersistence.cs @@ -263,7 +263,7 @@ public virtual async Task InsertAsync(IEntitySession session, IEntity ent var bAllow = factory.AllowInsertIdentity; if (field != null && field.IsIdentity && !bAllow && factory.AutoIdentity) { - var id = await session.InsertAndGetIdentityAsync(sql, CommandType.Text, dps); + var id = await session.InsertAndGetIdentityAsync(sql, CommandType.Text, dps).ConfigureAwait(false); if (id > 0) entity[field.Name] = id; rs = id > 0 ? 1 : 0; } @@ -279,7 +279,7 @@ public virtual async Task InsertAsync(IEntitySession session, IEntity ent if (bAllow) sql = $"SET IDENTITY_INSERT {session.FormatedTableName} ON;{sql};SET IDENTITY_INSERT {session.FormatedTableName} OFF"; } } - rs = await session.ExecuteAsync(sql, CommandType.Text, dps); + rs = await session.ExecuteAsync(sql, CommandType.Text, dps).ConfigureAwait(false); } // 清除脏数据,避免连续两次调用Save造成重复提交 @@ -312,7 +312,7 @@ public virtual async Task UpdateAsync(IEntitySession session, IEntity ent entity.Dirtys.Clear(); } - var rs = await session.ExecuteAsync(sql, CommandType.Text, dps); + var rs = await session.ExecuteAsync(sql, CommandType.Text, dps).ConfigureAwait(false); //EntityAddition.ClearValues(entity as EntityBase); @@ -329,7 +329,7 @@ public virtual async Task DeleteAsync(IEntitySession session, IEntity ent var sql = SQL(session, entity, DataObjectMethodType.Delete, ref dps); if (sql.IsNullOrEmpty()) return 0; - var rs = await session.ExecuteAsync(sql, CommandType.Text, dps); + var rs = await session.ExecuteAsync(sql, CommandType.Text, dps).ConfigureAwait(false); // 清除脏数据,避免重复提交保存 entity.Dirtys.Clear(); diff --git a/XCode/XCode.csproj b/XCode/XCode.csproj index e10f9c661..ac42f965d 100644 --- a/XCode/XCode.csproj +++ b/XCode/XCode.csproj @@ -20,6 +20,8 @@ True ..\Doc\newlife.snk 1701;1702;NU5104;NETSDK1138;CS7035 + latest + CA2007 NewLife.XCode @@ -44,7 +46,7 @@ - + diff --git a/XUnitTest.XCode/XUnitTest.XCode.csproj b/XUnitTest.XCode/XUnitTest.XCode.csproj index 48445eebf..115a45f1f 100644 --- a/XUnitTest.XCode/XUnitTest.XCode.csproj +++ b/XUnitTest.XCode/XUnitTest.XCode.csproj @@ -81,7 +81,7 @@ - +