From 36c20b813dc719321137343245dec96f75c32457 Mon Sep 17 00:00:00 2001 From: nsnail Date: Mon, 20 Nov 2023 18:11:44 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E2=9A=A1=20=E5=BC=95=E5=85=A5=20Micros?= =?UTF-8?q?oft.VisualStudio.Threading.Analyzers=20=E5=88=86=E6=9E=90?= =?UTF-8?q?=E5=99=A8=20(#62)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code.quality.props | 4 + dotnet-tools.json | 4 +- .../IApplicationBuilderExtensions.cs | 4 +- .../Filters/JwtHandler.cs | 2 +- .../NetAdmin.BizServer.Tests/AllTests.cs | 11 +- .../NetAdmin.Cache/DistributedCache.cs | 8 +- .../NetAdmin.Domain/Contexts/ContextApp.cs | 4 +- .../BackgroundRunning/WorkBase.cs | 6 +- .../Extensions/HttpContextExtensions.cs | 4 +- .../Extensions/ServiceCollectionExtensions.cs | 3 + .../Extensions/UnitOfWorkManagerExtensions.cs | 2 +- .../NetAdmin.Host/Filters/ApiResultHandler.cs | 4 +- .../Filters/TransactionInterceptor.cs | 13 +- .../Middlewares/RemoveNullNodeMiddleware.cs | 4 +- .../Middlewares/RequestAuditMiddleware.cs | 11 +- .../NetAdmin.Host/Utils/RequestLogger.cs | 4 +- .../HttpRequestMessageExtensions.cs | 4 +- .../Extensions/HttpRequestPartExtensions.cs | 30 ++-- .../HttpResponseMessageExtensions.cs | 6 +- .../NetAdmin.Infrastructure.csproj | 6 +- .../Utils/CaptchaImageHelper.cs | 6 +- .../Utils/MinioHelper.cs | 6 +- .../Jobs/ExampleJob.cs | 2 +- .../Services/Sys/ApiService.cs | 9 +- .../Services/Sys/CacheService.cs | 18 +- .../Services/Sys/CaptchaService.cs | 5 +- .../Services/Sys/ConfigService.cs | 25 +-- .../Services/Sys/DeptService.cs | 21 +-- .../Services/Sys/DevService.cs | 68 +++++--- .../Services/Sys/DicCatalogService.cs | 28 ++-- .../Services/Sys/DicContentService.cs | 32 +++- .../Services/Sys/FileService.cs | 2 +- .../Services/Sys/MenuService.cs | 16 +- .../Services/Sys/RequestLogService.cs | 13 +- .../Services/Sys/RoleService.cs | 35 ++-- .../Services/Sys/SiteMsgDeptService.cs | 24 ++- .../Services/Sys/SiteMsgFlagService.cs | 26 ++- .../Services/Sys/SiteMsgRoleService.cs | 24 ++- .../Services/Sys/SiteMsgService.cs | 91 +++++----- .../Services/Sys/SiteMsgUserService.cs | 24 ++- .../Services/Sys/UserProfileService.cs | 22 ++- .../Services/Sys/UserService.cs | 158 +++++++++++------- .../Services/Sys/VerifyCodeService.cs | 38 +++-- .../Services/Tpl/ExampleService.cs | 24 ++- .../Sys/CaptchaCache.cs | 13 +- .../Sys/UserCache.cs | 4 +- .../Controllers/Sys/UserController.cs | 9 +- .../Controllers/Sys/VerifyCodeController.cs | 4 +- .../Subscribers/ApiSynchronizer.cs | 2 +- .../Subscribers/CacheCleaner.cs | 2 +- .../Subscribers/EmailCodeSender.cs | 5 +- .../Subscribers/OperationLogger.cs | 2 +- .../Subscribers/SmsCodeSender.cs | 5 +- src/backend/NetAdmin.Tests/WebApiTestBase.cs | 10 +- switcher.furion.json | 2 +- 55 files changed, 545 insertions(+), 364 deletions(-) diff --git a/code.quality.props b/code.quality.props index 3b80dab1..68b2ece0 100644 --- a/code.quality.props +++ b/code.quality.props @@ -15,6 +15,10 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/dotnet-tools.json b/dotnet-tools.json index f0f69208..9ed33e04 100644 --- a/dotnet-tools.json +++ b/dotnet-tools.json @@ -9,13 +9,13 @@ ] }, "cake.tool": { - "version": "3.2.0", + "version": "4.0.0", "commands": [ "dotnet-cake" ] }, "dotnet-script": { - "version": "1.4.0", + "version": "1.5.0", "commands": [ "dotnet-script" ] diff --git a/src/backend/NetAdmin.BizServer.Host/Extensions/IApplicationBuilderExtensions.cs b/src/backend/NetAdmin.BizServer.Host/Extensions/IApplicationBuilderExtensions.cs index 63c64e3b..ada097cb 100644 --- a/src/backend/NetAdmin.BizServer.Host/Extensions/IApplicationBuilderExtensions.cs +++ b/src/backend/NetAdmin.BizServer.Host/Extensions/IApplicationBuilderExtensions.cs @@ -56,11 +56,11 @@ public static class IApplicationBuilderExtensions if (output != null) { context.Response.ContentLength = output.Length; context.Response.ContentType = MimeTypeHelper.GetMimeTypeByExtName(_regex.Match(path!).Groups[1].Value); - await output.CopyToAsync(context.Response.Body); + await output.CopyToAsync(context.Response.Body).ConfigureAwait(false); return; } } - await next.Invoke(); + await next.Invoke().ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.BizServer.Host/Filters/JwtHandler.cs b/src/backend/NetAdmin.BizServer.Host/Filters/JwtHandler.cs index 6b74d59f..a0dcc6de 100644 --- a/src/backend/NetAdmin.BizServer.Host/Filters/JwtHandler.cs +++ b/src/backend/NetAdmin.BizServer.Host/Filters/JwtHandler.cs @@ -23,7 +23,7 @@ public sealed class JwtHandler : AppAuthorizeHandler } // 数据库不存在context user,或用户已被禁用,拒绝访问 - var userInfo = await App.GetService().UserInfoAsync(); + var userInfo = await App.GetService().UserInfoAsync().ConfigureAwait(false); if (userInfo?.Roles == null) { return false; } diff --git a/src/backend/NetAdmin.BizServer.Tests/AllTests.cs b/src/backend/NetAdmin.BizServer.Tests/AllTests.cs index 51bfce50..59acd194 100644 --- a/src/backend/NetAdmin.BizServer.Tests/AllTests.cs +++ b/src/backend/NetAdmin.BizServer.Tests/AllTests.cs @@ -32,7 +32,7 @@ public class AllTests(WebApplicationFactory factory, ITestOutputHelper [Fact] public async Task CacheStatisticsAsync() { - var rsp = await PostAsync("/api/sys/cache/cache.statistics", null); + var rsp = await PostAsync("/api/sys/cache/cache.statistics", null).ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, rsp.StatusCode); return default; } @@ -73,7 +73,8 @@ public class AllTests(WebApplicationFactory factory, ITestOutputHelper public async Task> GetAllEntriesAsync(PagedQueryReq req) { var rsp = await PostAsync("/api/sys/cache/get.all.entries" - , JsonContent.Create(new PagedQueryReq())); + , JsonContent.Create(new PagedQueryReq())) + .ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, rsp.StatusCode); return default; } @@ -106,7 +107,7 @@ public class AllTests(WebApplicationFactory factory, ITestOutputHelper [Fact] public async Task GetServerUtcTimeAsync() { - var response = await PostAsync("/api/sys/tools/get.server.utc.time", null); + var response = await PostAsync("/api/sys/tools/get.server.utc.time", null).ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, response.StatusCode); return default; } @@ -115,7 +116,7 @@ public class AllTests(WebApplicationFactory factory, ITestOutputHelper [Fact] public async Task GetVersionAsync() { - var response = await PostAsync("/api/sys/tools/version", null); + var response = await PostAsync("/api/sys/tools/version", null).ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, response.StatusCode); return default; } @@ -154,7 +155,7 @@ public class AllTests(WebApplicationFactory factory, ITestOutputHelper [Fact] public async Task SyncAsync() { - var response = await PostAsync("/api/sys/api/sync", null); + var response = await PostAsync("/api/sys/api/sync", null).ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, response.StatusCode); } diff --git a/src/backend/NetAdmin.Cache/DistributedCache.cs b/src/backend/NetAdmin.Cache/DistributedCache.cs index f8d20b93..6709c373 100644 --- a/src/backend/NetAdmin.Cache/DistributedCache.cs +++ b/src/backend/NetAdmin.Cache/DistributedCache.cs @@ -45,7 +45,7 @@ public abstract class DistributedCache : CacheBase protected async Task GetAsync(string key) { - var cacheRead = await Cache.GetStringAsync(key); + var cacheRead = await Cache.GetStringAsync(key).ConfigureAwait(false); return cacheRead != null ? cacheRead.ToObject() : default; } @@ -69,19 +69,19 @@ public abstract class DistributedCache : CacheBase GetOrCreateAsync(string key, Func> createProc, TimeSpan? absLifeTime = null , TimeSpan? slideLifeTime = null) { - var cacheRead = await GetAsync(key); + var cacheRead = await GetAsync(key).ConfigureAwait(false); if (cacheRead is not null) { return cacheRead; } - var obj = await createProc.Invoke(); + var obj = await createProc.Invoke().ConfigureAwait(false); var cacheWrite = obj?.ToJson(); if (cacheWrite == null) { return obj; } - await CreateAsync(key, obj, absLifeTime, slideLifeTime); + await CreateAsync(key, obj, absLifeTime, slideLifeTime).ConfigureAwait(false); return obj; } diff --git a/src/backend/NetAdmin.Domain/Contexts/ContextApp.cs b/src/backend/NetAdmin.Domain/Contexts/ContextApp.cs index 836fa40b..f5b39e4d 100644 --- a/src/backend/NetAdmin.Domain/Contexts/ContextApp.cs +++ b/src/backend/NetAdmin.Domain/Contexts/ContextApp.cs @@ -66,7 +66,7 @@ public sealed record ContextApp : DataAbstraction, IValidatableObject // 具有secret的情况下,自动生成时间戳+sign,方便调试 if (!ret.AppSecret.NullOrEmpty()) { ret.Timestamp = DateTime.Now.TimeUnixUtc(); - ret.Sign = await ret.BuildSignFromHttpContextAsync(); + ret.Sign = await ret.BuildSignFromHttpContextAsync().ConfigureAwait(false); } return ret; @@ -88,7 +88,7 @@ public sealed record ContextApp : DataAbstraction, IValidatableObject public async Task BuildSignFromHttpContextAsync() { var sr = new StreamReader(App.HttpContext.Request.Body); - var reqBody = await sr.ReadToEndAsync(); + var reqBody = await sr.ReadToEndAsync().ConfigureAwait(false); _ = App.HttpContext.Request.Body.Seek(0, SeekOrigin.Begin); return BuildSign(reqBody); diff --git a/src/backend/NetAdmin.Host/BackgroundRunning/WorkBase.cs b/src/backend/NetAdmin.Host/BackgroundRunning/WorkBase.cs index 4609a0ef..3f67c9e4 100644 --- a/src/backend/NetAdmin.Host/BackgroundRunning/WorkBase.cs +++ b/src/backend/NetAdmin.Host/BackgroundRunning/WorkBase.cs @@ -58,15 +58,15 @@ public abstract class WorkBase { if (singleInstance) { // 加锁 - await using var redLock = await GetLockerAsync(GetType().FullName); + await using var redLock = await GetLockerAsync(GetType().FullName).ConfigureAwait(false); if (!redLock.IsAcquired) { throw new NetAdminGetLockerException(); } - await WorkflowAsync(cancelToken); + await WorkflowAsync(cancelToken).ConfigureAwait(false); return; } - await WorkflowAsync(cancelToken); + await WorkflowAsync(cancelToken).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Host/Extensions/HttpContextExtensions.cs b/src/backend/NetAdmin.Host/Extensions/HttpContextExtensions.cs index 53aeb343..7b618cbc 100644 --- a/src/backend/NetAdmin.Host/Extensions/HttpContextExtensions.cs +++ b/src/backend/NetAdmin.Host/Extensions/HttpContextExtensions.cs @@ -24,11 +24,11 @@ public static class HttpContextExtensions _ = me.Response.Body.Seek(0, SeekOrigin.Begin); var sr = new StreamReader(me.Response.Body); - var bodyString = await sr.ReadToEndAsync(); + var bodyString = await sr.ReadToEndAsync().ConfigureAwait(false); bodyString = _nullRegex.Replace(bodyString, string.Empty).Replace(",}", "}"); _ = me.Response.Body.Seek(0, SeekOrigin.Begin); var bytes = Encoding.UTF8.GetBytes(bodyString); me.Response.Body.SetLength(bytes.Length); - await me.Response.Body.WriteAsync(bytes); + await me.Response.Body.WriteAsync(bytes).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs b/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs index 5442685c..e06ef126 100644 --- a/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs +++ b/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs @@ -164,6 +164,8 @@ public static class ServiceCollectionExtensions freeSql.Aop.AuditValue += sqlAuditor.DataAuditHandler; // Insert/Update自动值处理 var eventPublisher = App.GetService(); + #pragma warning disable VSTHRD110 + // AOP事件发布(异步) freeSql.Aop.CommandBefore += (_, e) => eventPublisher.PublishAsync(new SqlCommandBeforeEvent(e)); // 增删查改,执行命令之前触发 @@ -175,6 +177,7 @@ public static class ServiceCollectionExtensions freeSql.Aop.SyncStructureAfter += (_, e) => eventPublisher.PublishAsync(new SyncStructureAfterEvent(e)); // CodeFirst迁移,执行完成触发 + #pragma warning restore VSTHRD110 // 全局过滤器设置 freeSqlConfig?.Invoke(freeSql); diff --git a/src/backend/NetAdmin.Host/Extensions/UnitOfWorkManagerExtensions.cs b/src/backend/NetAdmin.Host/Extensions/UnitOfWorkManagerExtensions.cs index fbcfdc31..fea74aab 100644 --- a/src/backend/NetAdmin.Host/Extensions/UnitOfWorkManagerExtensions.cs +++ b/src/backend/NetAdmin.Host/Extensions/UnitOfWorkManagerExtensions.cs @@ -17,7 +17,7 @@ public static class UnitOfWorkManagerExtensions #if DEBUG logger?.Debug($"{Ln.开始事务}: {hashCode}"); #endif - await handle(); + await handle().ConfigureAwait(false); unitOfWork.Commit(); logger?.Info($"{Ln.事务已提交}: {hashCode}"); } diff --git a/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs b/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs index f99514e0..fc6c600d 100644 --- a/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs +++ b/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs @@ -35,7 +35,7 @@ public abstract class ApiResultHandler /// /// HTTP状态码处理 /// - #pragma warning disable ASA001 + #pragma warning disable ASA001, VSTHRD200 public Task OnResponseStatusCodes( // HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings = null) { @@ -44,6 +44,8 @@ public abstract class ApiResultHandler return Task.CompletedTask; } + #pragma warning restore ASA001, VSTHRD200 + /// /// 请求成功 /// diff --git a/src/backend/NetAdmin.Host/Filters/TransactionInterceptor.cs b/src/backend/NetAdmin.Host/Filters/TransactionInterceptor.cs index 2fbe7c2f..2a066dfa 100644 --- a/src/backend/NetAdmin.Host/Filters/TransactionInterceptor.cs +++ b/src/backend/NetAdmin.Host/Filters/TransactionInterceptor.cs @@ -15,16 +15,17 @@ public sealed class TransactionInterceptor(UnitOfWorkManager uowManager) : IAsyn // 跳过没有事务特性标记的方法 if (context.HttpContext.GetControllerActionDescriptor().MethodInfo.GetCustomAttribute() == null) { - _ = await next(); + _ = await next().ConfigureAwait(false); return; } // 事务操作 await uowManager.AtomicOperateAsync(async () => { - var result = await next(); - if (result.Exception != null) { - throw result.Exception; - } - }); + var result = await next().ConfigureAwait(false); + if (result.Exception != null) { + throw result.Exception; + } + }) + .ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Host/Middlewares/RemoveNullNodeMiddleware.cs b/src/backend/NetAdmin.Host/Middlewares/RemoveNullNodeMiddleware.cs index 5bf74d55..6534de32 100644 --- a/src/backend/NetAdmin.Host/Middlewares/RemoveNullNodeMiddleware.cs +++ b/src/backend/NetAdmin.Host/Middlewares/RemoveNullNodeMiddleware.cs @@ -13,12 +13,12 @@ public sealed class RemoveNullNodeMiddleware(RequestDelegate next) /// public async Task InvokeAsync(HttpContext context) { - await next(context); + await next(context).ConfigureAwait(false); if (context.GetMetadata() is null) { return; } - await context.RemoveJsonNodeWithNullValueAsync(); + await context.RemoveJsonNodeWithNullValueAsync().ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs b/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs index 925a5bc5..a5d4ac6b 100644 --- a/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs +++ b/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs @@ -27,7 +27,7 @@ public sealed class RequestAuditMiddleware(RequestDelegate next if (!context.Request.Path.StartsWithSegments(_defaultRoutePrefix) // 非api请求 || context.Request.Path.StartsWithSegments(_healthCheckRoutePrefix) // 健康检查 || context.Request.Method == Chars.FLG_HTTP_METHOD_OPTIONS) { // is options 请求 - await next(context); + await next(context).ConfigureAwait(false); return; } @@ -40,14 +40,14 @@ public sealed class RequestAuditMiddleware(RequestDelegate next // 调用下一个中间件 var sw = Stopwatch.StartNew(); - await next(context); + await next(context).ConfigureAwait(false); sw.Stop(); _ = ms.Seek(0, SeekOrigin.Begin); using var sr = new StreamReader(ms); - var responseBody = await sr.ReadToEndAsync(); + var responseBody = await sr.ReadToEndAsync().ConfigureAwait(false); _ = ms.Seek(0, SeekOrigin.Begin); - await ms.CopyToAsync(stream); + await ms.CopyToAsync(stream).ConfigureAwait(false); context.Response.Body = stream; var exception = context.Features.Get(); @@ -56,6 +56,7 @@ public sealed class RequestAuditMiddleware(RequestDelegate next ?.Enum() ?? 0; _ = await requestLogger.LogAsync(context, (long)sw.Elapsed.TotalMicroseconds, responseBody, errorCode - , exception); + , exception) + .ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Host/Utils/RequestLogger.cs b/src/backend/NetAdmin.Host/Utils/RequestLogger.cs index 9070447c..e226fe84 100644 --- a/src/backend/NetAdmin.Host/Utils/RequestLogger.cs +++ b/src/backend/NetAdmin.Host/Utils/RequestLogger.cs @@ -35,7 +35,7 @@ public sealed class RequestLogger(ILogger _textContentTypes , x => context.Request.ContentType?.Contains( x, StringComparison.OrdinalIgnoreCase) ?? false) - ? await context.ReadBodyContentAsync() + ? await context.ReadBodyContentAsync().ConfigureAwait(false) : string.Empty , RequestUrl = context.Request.GetRequestUrlAddress() , ResponseBody = responseBody @@ -57,7 +57,7 @@ public sealed class RequestLogger(ILogger logger.Info(auditData); // 发布请求日志事件 - await eventPublisher.PublishAsync(new RequestLogEvent(auditData)); + await eventPublisher.PublishAsync(new RequestLogEvent(auditData)).ConfigureAwait(false); return auditData; } diff --git a/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs b/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs index eec19fb7..f2c34c56 100644 --- a/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs +++ b/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs @@ -10,7 +10,7 @@ public static class HttpRequestMessageExtensions /// public static async Task BuildJsonAsync(this HttpRequestMessage me) { - var body = me?.Content == null ? null : await me.Content!.ReadAsStringAsync(); + var body = me?.Content == null ? null : await me.Content!.ReadAsStringAsync().ConfigureAwait(false); return new { Uri = me?.RequestUri, Header = me?.ToString(), Body = body }.ToJson(); } @@ -19,7 +19,7 @@ public static class HttpRequestMessageExtensions /// public static async Task LogAsync(this HttpRequestMessage me, ILogger logger) { - logger.Info($"{Ln.请求}: {await me.BuildJsonAsync()}"); + logger.Info($"{Ln.请求}: {await me.BuildJsonAsync().ConfigureAwait(false)}"); return me; } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestPartExtensions.cs b/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestPartExtensions.cs index 24812ec2..fa131677 100644 --- a/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestPartExtensions.cs +++ b/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestPartExtensions.cs @@ -13,23 +13,25 @@ public static class HttpRequestPartExtensions public static HttpRequestPart SetLog(this HttpRequestPart me, ILogger logger , Func bodyHandle = null) { - async void RequestHandle(HttpClient _, HttpRequestMessage req) + #pragma warning disable S1172 + + Task RequestHandle(HttpClient _, HttpRequestMessage req) { - #pragma warning disable IDE0058 - await req.LogAsync(logger); - #pragma warning restore IDE0058 + return req.LogAsync(logger); } + Task ExceptionHandle(HttpClient _, HttpResponseMessage rsp, string errors) + { + return rsp.LogExceptionAsync(errors, logger, bodyHandle); + } + + Task ResponseHandle(HttpClient _, HttpResponseMessage rsp) + { + return rsp.LogAsync(logger, bodyHandle); + } + + #pragma warning restore S1172 + return me.OnRequesting(RequestHandle).OnResponsing(ResponseHandle).OnException(ExceptionHandle); - - async void ExceptionHandle(HttpClient _, HttpResponseMessage rsp, string errors) - { - await rsp.LogExceptionAsync(errors, logger, bodyHandle); - } - - async void ResponseHandle(HttpClient _, HttpResponseMessage rsp) - { - await rsp.LogAsync(logger, bodyHandle); - } } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs b/src/backend/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs index 3297ce62..2375df83 100644 --- a/src/backend/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs +++ b/src/backend/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs @@ -11,7 +11,7 @@ public static class HttpResponseMessageExtensions public static async Task LogAsync(this HttpResponseMessage me, ILogger logger , Func bodyPreHandle = null) { - logger.Info(await me.BuildJsonAsync(bodyPreHandle)); + logger.Info(await me.BuildJsonAsync(bodyPreHandle).ConfigureAwait(false)); } /// @@ -20,7 +20,7 @@ public static class HttpResponseMessageExtensions public static async Task LogExceptionAsync(this HttpResponseMessage me, string errors, ILogger logger , Func bodyHandle = null) { - logger.Warn($"{errors}: {await me.BuildJsonAsync(bodyHandle)}"); + logger.Warn($"{errors}: {await me.BuildJsonAsync(bodyHandle).ConfigureAwait(false)}"); } /// @@ -29,7 +29,7 @@ public static class HttpResponseMessageExtensions private static async Task BuildJsonAsync( // this HttpResponseMessage me, Func bodyHandle = null) { - var body = me?.Content is null ? null : await me.Content!.ReadAsStringAsync(); + var body = me?.Content is null ? null : await me.Content!.ReadAsStringAsync().ConfigureAwait(false); return new { Header = me?.ToString(), Body = bodyHandle is null ? body : bodyHandle(body) }.ToJson(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj b/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj index 0d909654..d84feba3 100644 --- a/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj +++ b/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj @@ -8,9 +8,9 @@ - - - + + + diff --git a/src/backend/NetAdmin.Infrastructure/Utils/CaptchaImageHelper.cs b/src/backend/NetAdmin.Infrastructure/Utils/CaptchaImageHelper.cs index 5c716b06..189ef34b 100644 --- a/src/backend/NetAdmin.Infrastructure/Utils/CaptchaImageHelper.cs +++ b/src/backend/NetAdmin.Infrastructure/Utils/CaptchaImageHelper.cs @@ -39,12 +39,12 @@ public static class CaptchaImageHelper await using var tranStream = resAsm.GetManifestResourceStream($"{tempPath}._{templateIndex}.transparent.png"); // 底图 - using var backgroundImage = await Image.LoadAsync(bgStream); + using var backgroundImage = await Image.LoadAsync(bgStream).ConfigureAwait(false); - using var darkTemplateImage = await Image.LoadAsync(darkStream); + using var darkTemplateImage = await Image.LoadAsync(darkStream).ConfigureAwait(false); // 透明模板图 - using var transparentTemplateImage = await Image.LoadAsync(tranStream); + using var transparentTemplateImage = await Image.LoadAsync(tranStream).ConfigureAwait(false); // 调整模板图大小 darkTemplateImage.Mutate(x => x.Resize(sliderSize)); diff --git a/src/backend/NetAdmin.Infrastructure/Utils/MinioHelper.cs b/src/backend/NetAdmin.Infrastructure/Utils/MinioHelper.cs index 6249693c..5eafe657 100644 --- a/src/backend/NetAdmin.Infrastructure/Utils/MinioHelper.cs +++ b/src/backend/NetAdmin.Infrastructure/Utils/MinioHelper.cs @@ -26,9 +26,9 @@ public sealed class MinioHelper(IOptions uploadOptions) : IScoped var beArgs = new BucketExistsArgs().WithBucket(uploadOptions.Value.Minio.BucketName); - if (!await minio.BucketExistsAsync(beArgs)) { + if (!await minio.BucketExistsAsync(beArgs).ConfigureAwait(false)) { var mbArgs = new MakeBucketArgs().WithBucket(uploadOptions.Value.Minio.BucketName); - await minio.MakeBucketAsync(mbArgs); + await minio.MakeBucketAsync(mbArgs).ConfigureAwait(false); } var putArgs = new PutObjectArgs().WithBucket(uploadOptions.Value.Minio.BucketName) @@ -36,7 +36,7 @@ public sealed class MinioHelper(IOptions uploadOptions) : IScoped .WithStreamData(fileStream) .WithObjectSize(fileSize) .WithContentType(contentType); - _ = await minio.PutObjectAsync(putArgs); + _ = await minio.PutObjectAsync(putArgs).ConfigureAwait(false); return $"{uploadOptions.Value.Minio.AccessUrl}/{uploadOptions.Value.Minio.BucketName}/{objectName}"; } diff --git a/src/backend/NetAdmin.ScheduledService/Jobs/ExampleJob.cs b/src/backend/NetAdmin.ScheduledService/Jobs/ExampleJob.cs index e94fa8f8..7c964854 100644 --- a/src/backend/NetAdmin.ScheduledService/Jobs/ExampleJob.cs +++ b/src/backend/NetAdmin.ScheduledService/Jobs/ExampleJob.cs @@ -20,7 +20,7 @@ public sealed class ExampleJob : WorkBase, IJob /// 加锁失败异常 public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { - await WorkflowAsync(stoppingToken); + await WorkflowAsync(stoppingToken).ConfigureAwait(false); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs index ebdd6739..50a6439e 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs @@ -52,7 +52,10 @@ public sealed class ApiService(DefaultRepository rpo /// public async Task> QueryAsync(QueryReq req) { - var ret = await Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter).ToTreeListAsync(); + var ret = await Rpo.Select.WhereDynamicFilter(req.DynamicFilter) + .WhereDynamic(req.Filter) + .ToTreeListAsync() + .ConfigureAwait(false); return ret.Adapt>(); } @@ -90,14 +93,14 @@ public sealed class ApiService(DefaultRepository rpo /// public async Task SyncAsync() { - _ = await Rpo.DeleteAsync(_ => true); + _ = await Rpo.DeleteAsync(_ => true).ConfigureAwait(false); var list = ReflectionList(false); EnableCascadeSave = true; foreach (var item in list) { var entity = item.Adapt(); - _ = await Rpo.InsertAsync(entity); + _ = await Rpo.InsertAsync(entity).ConfigureAwait(false); } } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs index 4780f5ac..2afe0203 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs @@ -11,19 +11,23 @@ public sealed class CacheService(IConnectionMultiplexer connectionMultiplexer) / : ServiceBase, ICacheService { /// - public Task CacheStatisticsAsync() + public async Task CacheStatisticsAsync() { var database = connectionMultiplexer.GetDatabase(); - return Task.FromResult( - new CacheStatisticsRsp((string)database.Execute("info")) { DbSize = (long)database.Execute("dbSize") }); + + return new CacheStatisticsRsp((string)await database.ExecuteAsync("info").ConfigureAwait(false)) { + DbSize = (long)await database.ExecuteAsync("dbSize").ConfigureAwait(false) + }; } /// - public Task> GetAllEntriesAsync(PagedQueryReq req) + public async Task> GetAllEntriesAsync(PagedQueryReq req) { var database = connectionMultiplexer.GetDatabase((int?)req.Filter?.DbIndex ?? 0); - var redisResults - = (RedisResult[])database.Execute("scan", (req.Page - 1) * req.PageSize, "count", req.PageSize); + var redisResults = (RedisResult[])await database + .ExecuteAsync("scan", (req.Page - 1) * req.PageSize, "count" + , req.PageSize) + .ConfigureAwait(false); var list = ((string[])redisResults![1])!.Where(x => database.KeyType(x) == RedisType.Hash) .Select(x => database.HashGetAll(x) @@ -33,6 +37,6 @@ public sealed class CacheService(IConnectionMultiplexer connectionMultiplexer) / .ToList() .ConvertAll(x => x.Adapt()); - return Task.FromResult(new PagedQueryRsp(req.Page, req.PageSize, 10000, list)); + return new PagedQueryRsp(req.Page, req.PageSize, 10000, list); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CaptchaService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CaptchaService.cs index 5d9c7f80..ae00aa19 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CaptchaService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CaptchaService.cs @@ -21,8 +21,9 @@ public sealed class CaptchaService : ServiceBase, ICaptchaServi public async Task GetCaptchaImageAsync() { var (backgroundImage, sliderImage, offsetSaw) = await CaptchaImageHelper.CreateSawSliderImageAsync( - _entryAsm, $"{_entryAsmName}.Assets.Captcha.background", $"{_entryAsmName}.Assets.Captcha.template" - , (1, 101), (1, 7), new Size(50, 50)); + _entryAsm, $"{_entryAsmName}.Assets.Captcha.background", $"{_entryAsmName}.Assets.Captcha.template" + , (1, 101), (1, 7), new Size(50, 50)) + .ConfigureAwait(false); var id = $"{nameof(GetCaptchaImageAsync)}_{YitIdHelper.NextId()}"; return new GetCaptchaRsp { diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs index 2bd5830a..6fef44aa 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs @@ -17,7 +17,7 @@ public sealed class ConfigService(DefaultRepository rpo) // { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -26,7 +26,7 @@ public sealed class ConfigService(DefaultRepository rpo) // /// public async Task CreateAsync(CreateConfigReq req) { - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } @@ -45,7 +45,7 @@ public sealed class ConfigService(DefaultRepository rpo) // /// public async Task GetAsync(QueryConfigReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } @@ -53,14 +53,19 @@ public sealed class ConfigService(DefaultRepository rpo) // public async Task GetLatestConfigAsync() { var ret = await QueryAsync( - new QueryReq { Count = 1, Filter = new QueryConfigReq { Enabled = true } }); + new QueryReq { Count = 1, Filter = new QueryConfigReq { Enabled = true } }) + .ConfigureAwait(false); return ret.FirstOrDefault(); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await QueryInternal(req).Page(req.Page, req.PageSize).Count(out var total).ToListAsync(); + var list = await QueryInternal(req) + .Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync() + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -69,7 +74,7 @@ public sealed class ConfigService(DefaultRepository rpo) // /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).Take(req.Count).ToListAsync(); + var ret = await QueryInternal(req).Take(req.Count).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } @@ -77,19 +82,19 @@ public sealed class ConfigService(DefaultRepository rpo) // public async Task UpdateAsync(UpdateConfigReq req) { if (Rpo.Orm.Ado.DataType == DataType.Sqlite) { - return await UpdateForSqliteAsync(req) as QueryConfigRsp; + return await UpdateForSqliteAsync(req).ConfigureAwait(false) as QueryConfigRsp; } - var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync(); + var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync().ConfigureAwait(false); return ret.FirstOrDefault()?.Adapt(); } /// protected override async Task UpdateForSqliteAsync(Sys_Config req) { - return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0 + return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0 ? null - : await GetAsync(new QueryConfigReq { Id = req.Id }); + : await GetAsync(new QueryConfigReq { Id = req.Id }).ConfigureAwait(false); } private ISelect QueryInternal(QueryReq req) diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs index d54811f1..fce1025b 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs @@ -16,7 +16,7 @@ public sealed class DeptService(DefaultRepository rpo) // { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -26,11 +26,11 @@ public sealed class DeptService(DefaultRepository rpo) // /// Parent_department_does_not_exist public async Task CreateAsync(CreateDeptReq req) { - if (req.ParentId != 0 && !await Rpo.Select.AnyAsync(a => a.Id == req.ParentId)) { + if (req.ParentId != 0 && !await Rpo.Select.AnyAsync(a => a.Id == req.ParentId).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.父节点不存在); } - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } @@ -40,17 +40,17 @@ public sealed class DeptService(DefaultRepository rpo) // /// 该部门下存在子部门 public async Task DeleteAsync(DelReq req) { - if (await Rpo.Orm.Select().AnyAsync(a => a.DeptId == req.Id)) { + if (await Rpo.Orm.Select().AnyAsync(a => a.DeptId == req.Id).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.该部门下存在用户); } #pragma warning disable IDE0046 - if (await Rpo.Select.AnyAsync(a => a.ParentId == req.Id)) { + if (await Rpo.Select.AnyAsync(a => a.ParentId == req.Id).ConfigureAwait(false)) { #pragma warning restore IDE0046 throw new NetAdminInvalidOperationException(Ln.该部门下存在子部门); } - return await Rpo.DeleteAsync(x => x.Id == req.Id); + return await Rpo.DeleteAsync(x => x.Id == req.Id).ConfigureAwait(false); } /// @@ -62,7 +62,7 @@ public sealed class DeptService(DefaultRepository rpo) // /// public async Task GetAsync(QueryDeptReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } @@ -75,17 +75,18 @@ public sealed class DeptService(DefaultRepository rpo) // /// public async Task> QueryAsync(QueryReq req) { - return (await QueryInternal(req).ToTreeListAsync()).Adapt>(); + return (await QueryInternal(req).ToTreeListAsync().ConfigureAwait(false)).Adapt>(); } /// /// NetAdminUnexpectedException public async Task UpdateAsync(UpdateDeptReq req) { - return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0 + return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0 ? throw new NetAdminUnexpectedException() : (await QueryInternal(new QueryReq { Filter = new QueryDeptReq { Id = req.Id } }, true) - .ToTreeListAsync())[0] + .ToTreeListAsync() + .ConfigureAwait(false))[0] .Adapt(); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DevService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DevService.cs index 2cd61558..a949e54c 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DevService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DevService.cs @@ -54,57 +54,70 @@ public sealed class DevService(IApiService apiService) : ServiceBase // Controller await WriteCodeFileAsync(req, Path.Combine(tplHostDir, "Controllers", "Tpl", "ExampleController.cs") - , Path.Combine(hostControllerDir, $"{req.ModuleName}Controller.cs")); + , Path.Combine(hostControllerDir, $"{req.ModuleName}Controller.cs")) + .ConfigureAwait(false); // CreateReq await WriteCodeFileAsync(req, Path.Combine(dataDir, "Dto", "Tpl", "Example", "CreateExampleReq.cs") - , Path.Combine(dtoDir, $"Create{req.ModuleName}Req.cs")); + , Path.Combine(dtoDir, $"Create{req.ModuleName}Req.cs")) + .ConfigureAwait(false); // UpdateReq await WriteCodeFileAsync(req, Path.Combine(dataDir, "Dto", "Tpl", "Example", "UpdateExampleReq.cs") - , Path.Combine(dtoDir, $"Update{req.ModuleName}Req.cs")); + , Path.Combine(dtoDir, $"Update{req.ModuleName}Req.cs")) + .ConfigureAwait(false); // QueryReq await WriteCodeFileAsync(req, Path.Combine(dataDir, "Dto", "Tpl", "Example", "QueryExampleReq.cs") - , Path.Combine(dtoDir, $"Query{req.ModuleName}Req.cs")); + , Path.Combine(dtoDir, $"Query{req.ModuleName}Req.cs")) + .ConfigureAwait(false); // QueryRsp await WriteCodeFileAsync(req, Path.Combine(dataDir, "Dto", "Tpl", "Example", "QueryExampleRsp.cs") - , Path.Combine(dtoDir, $"Query{req.ModuleName}Rsp.cs")); + , Path.Combine(dtoDir, $"Query{req.ModuleName}Rsp.cs")) + .ConfigureAwait(false); // ICache await WriteCodeFileAsync(req, Path.Combine(tplCacheDir, "Tpl", "Dependency", "IExampleCache.cs") - , Path.Combine(cacheDependencyDir, $"I{req.ModuleName}Cache.cs")); + , Path.Combine(cacheDependencyDir, $"I{req.ModuleName}Cache.cs")) + .ConfigureAwait(false); // Cache await WriteCodeFileAsync(req, Path.Combine(tplCacheDir, "Tpl", "ExampleCache.cs") - , Path.Combine(cacheDir, $"{req.ModuleName}Cache.cs")); + , Path.Combine(cacheDir, $"{req.ModuleName}Cache.cs")) + .ConfigureAwait(false); // IModule await WriteCodeFileAsync(req, Path.Combine(tplAppDir, "Modules", "Tpl", "IExampleModule.cs") - , Path.Combine(appModulesDir, $"I{req.ModuleName}Module.cs")); + , Path.Combine(appModulesDir, $"I{req.ModuleName}Module.cs")) + .ConfigureAwait(false); // IService await WriteCodeFileAsync(req, Path.Combine(tplAppDir, "Services", "Tpl", "Dependency", "IExampleService.cs") - , Path.Combine(appServicesDependencyDir, $"I{req.ModuleName}Service.cs")); + , Path.Combine(appServicesDependencyDir, $"I{req.ModuleName}Service.cs")) + .ConfigureAwait(false); // Service await WriteCodeFileAsync(req, Path.Combine(tplAppDir, "Services", "Tpl", "ExampleService.cs") - , Path.Combine(appServicesDir, $"{req.ModuleName}Service.cs")); + , Path.Combine(appServicesDir, $"{req.ModuleName}Service.cs")) + .ConfigureAwait(false); // Entity await WriteCodeFileAsync(req, Path.Combine(dataDir, "DbMaps", "Tpl", "Tpl_Example.cs") - , Path.Combine(entityDir, $"{moduleType[..3]}_{req.ModuleName}.cs")); + , Path.Combine(entityDir, $"{moduleType[..3]}_{req.ModuleName}.cs")) + .ConfigureAwait(false); } /// public async Task GenerateIconCodeAsync(GenerateIconCodeReq req) { var tplSvg = await File.ReadAllTextAsync( - Path.Combine(_clientProjectPath, "src", "assets", "icons", "tpl", "Svg.vue")); - var tplExport - = await File.ReadAllTextAsync( - Path.Combine(_clientProjectPath, "src", "assets", "icons", "tpl", "export.js")); + Path.Combine(_clientProjectPath, "src", "assets", "icons", "tpl", "Svg.vue")) + .ConfigureAwait(false); + var tplExport = await File + .ReadAllTextAsync(Path.Combine(_clientProjectPath, "src", "assets", "icons", "tpl" + , "export.js")) + .ConfigureAwait(false); var vueContent = tplSvg.Replace("$svgCode$", req.SvgCode).Replace(_REPLACE_TO_EMPTY, string.Empty); @@ -114,18 +127,19 @@ public sealed class DevService(IApiService apiService) : ServiceBase } var vueFile = Path.Combine(dir, $"{req.IconName}.vue"); - await File.WriteAllTextAsync(vueFile, vueContent); + await File.WriteAllTextAsync(vueFile, vueContent).ConfigureAwait(false); var indexJsFile = Path.Combine(dir, "index.js"); await File.AppendAllTextAsync( - indexJsFile - , Environment.NewLine + - tplExport.Replace("$iconName$", req.IconName).Replace(_REPLACE_TO_EMPTY, string.Empty)); + indexJsFile + , Environment.NewLine + + tplExport.Replace("$iconName$", req.IconName).Replace(_REPLACE_TO_EMPTY, string.Empty)) + .ConfigureAwait(false); // 修改iconSelect.js var iconSelectFile = Path.Combine(_clientProjectPath, "src", "config", "iconSelect.js"); - var iconSelectContent = await File.ReadAllTextAsync(iconSelectFile); + var iconSelectContent = await File.ReadAllTextAsync(iconSelectFile).ConfigureAwait(false); iconSelectContent = iconSelectContent.Replace("export default", "exportDefault:").Replace("'", "\""); iconSelectContent = _regex2.Replace(iconSelectContent, "\"$1\":"); iconSelectContent = "{" + iconSelectContent + "}"; @@ -133,15 +147,17 @@ public sealed class DevService(IApiService apiService) : ServiceBase iconExportJsInfo.ExportDefault.Icons.Last().Icons.Add($"sc-icon-{req.IconName.ToLowerInvariant()}"); var newContent = iconExportJsInfo.ToJson().TrimStart('{')[..^1].Replace("\"exportDefault\":", "export default"); - await File.WriteAllTextAsync(iconSelectFile, newContent); + await File.WriteAllTextAsync(iconSelectFile, newContent).ConfigureAwait(false); } /// public async Task GenerateJsCodeAsync() { // 模板文件 - var tplOuter = await File.ReadAllTextAsync(Path.Combine(_clientProjectPath, "src", "api", "tpl", "outer.js")); - var tplInner = await File.ReadAllTextAsync(Path.Combine(_clientProjectPath, "src", "api", "tpl", "inner.js")); + var tplOuter = await File.ReadAllTextAsync(Path.Combine(_clientProjectPath, "src", "api", "tpl", "outer.js")) + .ConfigureAwait(false); + var tplInner = await File.ReadAllTextAsync(Path.Combine(_clientProjectPath, "src", "api", "tpl", "inner.js")) + .ConfigureAwait(false); foreach (var item in apiService.ReflectionList(false)) { var dir = Path.Combine(_clientProjectPath, "src", "api", item.Namespace); @@ -158,7 +174,7 @@ public sealed class DevService(IApiService apiService) : ServiceBase , string.Join(Environment.NewLine + Environment.NewLine, Select(item))) .Replace(_REPLACE_TO_EMPTY, string.Empty); - await File.WriteAllTextAsync(file, content); + await File.WriteAllTextAsync(file, content).ConfigureAwait(false); } IEnumerable Select(QueryApiRsp item) @@ -191,12 +207,12 @@ public sealed class DevService(IApiService apiService) : ServiceBase private static async Task WriteCodeFileAsync(GenerateCsCodeReq req, string tplFile, string writeFile) { - var tplContent = await File.ReadAllTextAsync(tplFile); + var tplContent = await File.ReadAllTextAsync(tplFile).ConfigureAwait(false); tplContent = tplContent.Replace("Tpl", Enum.GetName(req.Type)![..3]) .Replace("示例", req.ModuleRemark) .Replace("Example", req.ModuleName) .Replace("NetAdmin.SysComponent", "SysComponent"); - await File.WriteAllTextAsync(writeFile, tplContent); + await File.WriteAllTextAsync(writeFile, tplContent).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs index 2c7963cb..d4403e6f 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs @@ -16,7 +16,7 @@ public sealed class DicCatalogService(DefaultRepository rpo) // { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -26,18 +26,19 @@ public sealed class DicCatalogService(DefaultRepository rpo) // /// The_parent_node_does_not_exist public async Task CreateAsync(CreateDicCatalogReq req) { - if (req.ParentId != 0 && !await Rpo.Where(a => a.Id == req.ParentId).ForUpdate().AnyAsync()) { + if (req.ParentId != 0 && + !await Rpo.Where(a => a.Id == req.ParentId).ForUpdate().AnyAsync().ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.父节点不存在); } - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// public async Task DeleteAsync(DelReq req) { - var ret = await Rpo.DeleteCascadeByDatabaseAsync(a => a.Id == req.Id); + var ret = await Rpo.DeleteCascadeByDatabaseAsync(a => a.Id == req.Id).ConfigureAwait(false); return ret.Count; } @@ -50,14 +51,20 @@ public sealed class DicCatalogService(DefaultRepository rpo) // /// public async Task GetAsync(QueryDicCatalogReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await QueryInternal(req).Page(req.Page, req.PageSize).Count(out var total).ToListAsync(); + var list = await QueryInternal(req) + .Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync() + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -66,7 +73,7 @@ public sealed class DicCatalogService(DefaultRepository rpo) // /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).ToTreeListAsync(); + var ret = await QueryInternal(req).ToTreeListAsync().ConfigureAwait(false); return ret.Adapt>(); } @@ -75,15 +82,16 @@ public sealed class DicCatalogService(DefaultRepository rpo) // /// NetAdminUnexpectedException public async Task UpdateAsync(UpdateDicCatalogReq req) { - if (req.ParentId != 0 && !await Rpo.Where(a => a.Id == req.ParentId).ForUpdate().AnyAsync()) { + if (req.ParentId != 0 && + !await Rpo.Where(a => a.Id == req.ParentId).ForUpdate().AnyAsync().ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.父节点不存在); } - if (await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0) { + if (await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0) { throw new NetAdminUnexpectedException(); } - var ret = await Rpo.Where(a => a.Id == req.Id).ToOneAsync(); + var ret = await Rpo.Where(a => a.Id == req.Id).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs index 80bed8eb..3cda6f73 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs @@ -16,7 +16,7 @@ public sealed class DicContentService(DefaultRepository rpo) // { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -26,11 +26,15 @@ public sealed class DicContentService(DefaultRepository rpo) // /// Dictionary_directory_does_not_exist public async Task CreateAsync(CreateDicContentReq req) { - if (!await Rpo.Orm.Select().Where(a => a.Id == req.CatalogId).ForUpdate().AnyAsync()) { + if (!await Rpo.Orm.Select() + .Where(a => a.Id == req.CatalogId) + .ForUpdate() + .AnyAsync() + .ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.字典目录不存在); } - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } @@ -49,14 +53,20 @@ public sealed class DicContentService(DefaultRepository rpo) // /// public async Task GetAsync(QueryDicContentReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await QueryInternal(req).Page(req.Page, req.PageSize).Count(out var total).ToListAsync(); + var list = await QueryInternal(req) + .Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync() + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -65,7 +75,7 @@ public sealed class DicContentService(DefaultRepository rpo) // /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).Take(req.Count).ToListAsync(); + var ret = await QueryInternal(req).Take(req.Count).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } @@ -74,15 +84,19 @@ public sealed class DicContentService(DefaultRepository rpo) // /// NetAdminUnexpectedException public async Task UpdateAsync(UpdateDicContentReq req) { - if (!await Rpo.Orm.Select().Where(a => a.Id == req.CatalogId).ForUpdate().AnyAsync()) { + if (!await Rpo.Orm.Select() + .Where(a => a.Id == req.CatalogId) + .ForUpdate() + .AnyAsync() + .ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.字典目录不存在); } - if (await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0) { + if (await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0) { throw new NetAdminUnexpectedException(); } - var ret = await Rpo.Where(a => a.Id == req.Id).ToOneAsync(); + var ret = await Rpo.Where(a => a.Id == req.Id).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/FileService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/FileService.cs index 65e49720..1096f97b 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/FileService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/FileService.cs @@ -29,6 +29,6 @@ public sealed class FileService(IOptions uploadOptions, MinioHelp var fileName = $"{Guid.NewGuid()}{Path.GetExtension(file.FileName)}"; var objectName = $"{UserToken.Id}/{fileName}"; await using var fs = file.OpenReadStream(); - return await minioHelper.UploadAsync(objectName, fs, file.ContentType, file.Length); + return await minioHelper.UploadAsync(objectName, fs, file.ContentType, file.Length).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs index 779e5469..d9fabbe7 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs @@ -16,7 +16,7 @@ public sealed class MenuService(DefaultRepository rpo, IUserService us { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -25,7 +25,7 @@ public sealed class MenuService(DefaultRepository rpo, IUserService us /// public async Task CreateAsync(CreateMenuReq req) { - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } @@ -44,7 +44,7 @@ public sealed class MenuService(DefaultRepository rpo, IUserService us /// public async Task GetAsync(QueryMenuReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } @@ -57,7 +57,7 @@ public sealed class MenuService(DefaultRepository rpo, IUserService us /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).ToTreeListAsync(); + var ret = await QueryInternal(req).ToTreeListAsync().ConfigureAwait(false); return ret.Adapt>(); } @@ -65,18 +65,18 @@ public sealed class MenuService(DefaultRepository rpo, IUserService us /// NetAdminUnexpectedException public async Task UpdateAsync(UpdateMenuReq req) { - if (await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0) { + if (await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0) { throw new NetAdminUnexpectedException(); } - var ret = await Rpo.Where(a => a.Id == req.Id).ToOneAsync(); + var ret = await Rpo.Where(a => a.Id == req.Id).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// public async Task> UserMenusAsync() { - var userInfo = await userService.UserInfoAsync(); + var userInfo = await userService.UserInfoAsync().ConfigureAwait(false); Task> ret; var req = new QueryReq(); @@ -98,7 +98,7 @@ public sealed class MenuService(DefaultRepository rpo, IUserService us ret = QueryAsync(req with { DynamicFilter = df }); } - return await ret; + return await ret.ConfigureAwait(false); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs index 51a76424..66fd449d 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs @@ -16,7 +16,7 @@ public sealed class RequestLogService(DefaultRepository rpo) // { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -25,7 +25,7 @@ public sealed class RequestLogService(DefaultRepository rpo) // /// public async Task CreateAsync(CreateRequestLogReq req) { - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } @@ -44,7 +44,9 @@ public sealed class RequestLogService(DefaultRepository rpo) // /// public async Task GetAsync(QueryRequestLogReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } @@ -66,7 +68,8 @@ public sealed class RequestLogService(DefaultRepository rpo) // , a.CreatedUserAgent , a.HttpStatusCode , a.Id - }); + }) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -75,7 +78,7 @@ public sealed class RequestLogService(DefaultRepository rpo) // /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).Take(req.Count).ToListAsync(); + var ret = await QueryInternal(req).Take(req.Count).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs index cfb0f88f..1f8bde46 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs @@ -16,7 +16,7 @@ public sealed class RoleService(DefaultRepository rpo) // { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -26,11 +26,11 @@ public sealed class RoleService(DefaultRepository rpo) // public async Task CreateAsync(CreateRoleReq req) { var entity = req.Adapt(); - var ret = await Rpo.InsertAsync(entity); + var ret = await Rpo.InsertAsync(entity).ConfigureAwait(false); - await Rpo.SaveManyAsync(entity, nameof(entity.Depts)); - await Rpo.SaveManyAsync(entity, nameof(entity.Menus)); - await Rpo.SaveManyAsync(entity, nameof(entity.Apis)); + await Rpo.SaveManyAsync(entity, nameof(entity.Depts)).ConfigureAwait(false); + await Rpo.SaveManyAsync(entity, nameof(entity.Menus)).ConfigureAwait(false); + await Rpo.SaveManyAsync(entity, nameof(entity.Apis)).ConfigureAwait(false); entity = entity with { Id = ret.Id }; return entity.Adapt(); @@ -40,9 +40,9 @@ public sealed class RoleService(DefaultRepository rpo) // /// Users_exist_under_this_role_and_deletion_is_not_allowed public async Task DeleteAsync(DelReq req) { - return await Rpo.Orm.Select().ForUpdate().AnyAsync(a => a.RoleId == req.Id) + return await Rpo.Orm.Select().ForUpdate().AnyAsync(a => a.RoleId == req.Id).ConfigureAwait(false) ? throw new NetAdminInvalidOperationException(Ln.该角色下存在用户) - : await Rpo.DeleteAsync(a => a.Id == req.Id); + : await Rpo.DeleteAsync(a => a.Id == req.Id).ConfigureAwait(false); } /// @@ -54,14 +54,18 @@ public sealed class RoleService(DefaultRepository rpo) // /// public async Task GetAsync(QueryRoleReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await QueryInternal(req).Page(req.Page, req.PageSize).Count(out var total).ToListAsync(); + var list = await QueryInternal(req) + .Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync() + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } @@ -69,7 +73,7 @@ public sealed class RoleService(DefaultRepository rpo) // /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).ToListAsync(); + var ret = await QueryInternal(req).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } @@ -77,12 +81,13 @@ public sealed class RoleService(DefaultRepository rpo) // public async Task UpdateAsync(UpdateRoleReq req) { var entity = req.Adapt(); - _ = await Rpo.UpdateAsync(entity); - await Rpo.SaveManyAsync(entity, nameof(entity.Depts)); - await Rpo.SaveManyAsync(entity, nameof(entity.Menus)); - await Rpo.SaveManyAsync(entity, nameof(entity.Apis)); + _ = await Rpo.UpdateAsync(entity).ConfigureAwait(false); + await Rpo.SaveManyAsync(entity, nameof(entity.Depts)).ConfigureAwait(false); + await Rpo.SaveManyAsync(entity, nameof(entity.Menus)).ConfigureAwait(false); + await Rpo.SaveManyAsync(entity, nameof(entity.Apis)).ConfigureAwait(false); - return (await QueryAsync(new QueryReq { Filter = new QueryRoleReq { Id = req.Id } })).First(); + return (await QueryAsync(new QueryReq { Filter = new QueryRoleReq { Id = req.Id } }) + .ConfigureAwait(false)).First(); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs index ba66fe11..267e2137 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs @@ -17,7 +17,7 @@ public sealed class SiteMsgDeptService(DefaultRepository rpo) / { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -26,7 +26,7 @@ public sealed class SiteMsgDeptService(DefaultRepository rpo) / /// public async Task CreateAsync(CreateSiteMsgDeptReq req) { - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } @@ -45,14 +45,20 @@ public sealed class SiteMsgDeptService(DefaultRepository rpo) / /// public async Task GetAsync(QuerySiteMsgDeptReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await QueryInternal(req).Page(req.Page, req.PageSize).Count(out var total).ToListAsync(); + var list = await QueryInternal(req) + .Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync() + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -61,7 +67,7 @@ public sealed class SiteMsgDeptService(DefaultRepository rpo) / /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).Take(req.Count).ToListAsync(); + var ret = await QueryInternal(req).Take(req.Count).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } @@ -69,19 +75,19 @@ public sealed class SiteMsgDeptService(DefaultRepository rpo) / public async Task UpdateAsync(UpdateSiteMsgDeptReq req) { if (Rpo.Orm.Ado.DataType == DataType.Sqlite) { - return await UpdateForSqliteAsync(req) as QuerySiteMsgDeptRsp; + return await UpdateForSqliteAsync(req).ConfigureAwait(false) as QuerySiteMsgDeptRsp; } - var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync(); + var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync().ConfigureAwait(false); return ret.FirstOrDefault()?.Adapt(); } /// protected override async Task UpdateForSqliteAsync(Sys_SiteMsgDept req) { - return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0 + return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0 ? null - : await GetAsync(new QuerySiteMsgDeptReq { Id = req.Id }); + : await GetAsync(new QuerySiteMsgDeptReq { Id = req.Id }).ConfigureAwait(false); } private ISelect QueryInternal(QueryReq req) diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs index 841fca37..c20710bc 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs @@ -17,7 +17,7 @@ public sealed class SiteMsgFlagService(DefaultRepository rpo) / { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -26,7 +26,7 @@ public sealed class SiteMsgFlagService(DefaultRepository rpo) / /// public async Task CreateAsync(CreateSiteMsgFlagReq req) { - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } @@ -45,14 +45,20 @@ public sealed class SiteMsgFlagService(DefaultRepository rpo) / /// public async Task GetAsync(QuerySiteMsgFlagReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await QueryInternal(req).Page(req.Page, req.PageSize).Count(out var total).ToListAsync(); + var list = await QueryInternal(req) + .Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync() + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -61,7 +67,7 @@ public sealed class SiteMsgFlagService(DefaultRepository rpo) / /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).Take(req.Count).ToListAsync(); + var ret = await QueryInternal(req).Take(req.Count).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } @@ -69,12 +75,13 @@ public sealed class SiteMsgFlagService(DefaultRepository rpo) / public async Task UpdateAsync(UpdateSiteMsgFlagReq req) { if (Rpo.Orm.Ado.DataType == DataType.Sqlite) { - return await UpdateForSqliteAsync(req) as QuerySiteMsgFlagRsp; + return await UpdateForSqliteAsync(req).ConfigureAwait(false) as QuerySiteMsgFlagRsp; } var ret = await Rpo.UpdateDiy.Set(a => a.UserSiteMsgStatus == req.UserSiteMsgStatus) .Where(a => a.UserId == req.UserId && a.SiteMsgId == req.SiteMsgId) - .ExecuteUpdatedAsync(); + .ExecuteUpdatedAsync() + .ConfigureAwait(false); return ret.FirstOrDefault()?.Adapt(); } @@ -83,9 +90,10 @@ public sealed class SiteMsgFlagService(DefaultRepository rpo) / { return await Rpo.UpdateDiy.Set(a => a.UserSiteMsgStatus == req.UserSiteMsgStatus) .Where(a => a.UserId == req.UserId && a.SiteMsgId == req.SiteMsgId) - .ExecuteAffrowsAsync() <= 0 + .ExecuteAffrowsAsync() + .ConfigureAwait(false) <= 0 ? null - : await GetAsync(new QuerySiteMsgFlagReq { Id = req.Id }); + : await GetAsync(new QuerySiteMsgFlagReq { Id = req.Id }).ConfigureAwait(false); } private ISelect QueryInternal(QueryReq req) diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs index ea98c4c7..775683d3 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs @@ -17,7 +17,7 @@ public sealed class SiteMsgRoleService(DefaultRepository rpo) / { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -26,7 +26,7 @@ public sealed class SiteMsgRoleService(DefaultRepository rpo) / /// public async Task CreateAsync(CreateSiteMsgRoleReq req) { - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } @@ -45,14 +45,20 @@ public sealed class SiteMsgRoleService(DefaultRepository rpo) / /// public async Task GetAsync(QuerySiteMsgRoleReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await QueryInternal(req).Page(req.Page, req.PageSize).Count(out var total).ToListAsync(); + var list = await QueryInternal(req) + .Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync() + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -61,7 +67,7 @@ public sealed class SiteMsgRoleService(DefaultRepository rpo) / /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).Take(req.Count).ToListAsync(); + var ret = await QueryInternal(req).Take(req.Count).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } @@ -69,19 +75,19 @@ public sealed class SiteMsgRoleService(DefaultRepository rpo) / public async Task UpdateAsync(UpdateSiteMsgRoleReq req) { if (Rpo.Orm.Ado.DataType == DataType.Sqlite) { - return await UpdateForSqliteAsync(req) as QuerySiteMsgRoleRsp; + return await UpdateForSqliteAsync(req).ConfigureAwait(false) as QuerySiteMsgRoleRsp; } - var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync(); + var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync().ConfigureAwait(false); return ret.FirstOrDefault()?.Adapt(); } /// protected override async Task UpdateForSqliteAsync(Sys_SiteMsgRole req) { - return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0 + return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0 ? null - : await GetAsync(new QuerySiteMsgRoleReq { Id = req.Id }); + : await GetAsync(new QuerySiteMsgRoleReq { Id = req.Id }).ConfigureAwait(false); } private ISelect QueryInternal(QueryReq req) diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs index acd967a7..cc56d8c9 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs @@ -21,7 +21,7 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -30,23 +30,23 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs /// public async Task CreateAsync(CreateSiteMsgReq req) { - await CreateUpdateCheckAsync(req); + await CreateUpdateCheckAsync(req).ConfigureAwait(false); // 主表 var entity = req.Adapt(); - var dbSiteMsg = await Rpo.InsertAsync(entity); + var dbSiteMsg = await Rpo.InsertAsync(entity).ConfigureAwait(false); // 分表 - await Rpo.SaveManyAsync(entity, nameof(entity.Roles)); + await Rpo.SaveManyAsync(entity, nameof(entity.Roles)).ConfigureAwait(false); // 分表 - await Rpo.SaveManyAsync(entity, nameof(entity.Users)); + await Rpo.SaveManyAsync(entity, nameof(entity.Users)).ConfigureAwait(false); // 分表 - await Rpo.SaveManyAsync(entity, nameof(entity.Depts)); + await Rpo.SaveManyAsync(entity, nameof(entity.Depts)).ConfigureAwait(false); - var ret = await QueryAsync( - new QueryReq { Filter = new QuerySiteMsgReq { Id = dbSiteMsg.Id } }); + var ret = await QueryAsync(new QueryReq { Filter = new QuerySiteMsgReq { Id = dbSiteMsg.Id } }) + .ConfigureAwait(false); return ret.Adapt(); } @@ -54,7 +54,7 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs /// public async Task DeleteAsync(DelReq req) { - var ret = await Rpo.DeleteCascadeByDatabaseAsync(a => a.Id == req.Id); + var ret = await Rpo.DeleteCascadeByDatabaseAsync(a => a.Id == req.Id).ConfigureAwait(false); return ret.Count; } @@ -71,7 +71,8 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs .IncludeMany(a => a.Roles) .IncludeMany(a => a.Users) .IncludeMany(a => a.Depts) - .ToOneAsync(); + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } @@ -79,14 +80,15 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs public async Task GetMineAsync(QuerySiteMsgReq req) { var ret = await PagedQueryMineAsync( - new PagedQueryReq { - DynamicFilter - = new DynamicFilterInfo { - Field = nameof(req.Id) - , Value = req.Id - , Operator = DynamicFilterOperators.Eq - } - }, true); + new PagedQueryReq { + DynamicFilter + = new DynamicFilterInfo { + Field = nameof(req.Id) + , Value = req.Id + , Operator = DynamicFilterOperators.Eq + } + }, true) + .ConfigureAwait(false); return ret.Rows.FirstOrDefault(); } @@ -104,7 +106,8 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs , a.Summary , a.Title , a.Version - }); + }) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -119,22 +122,23 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).Take(req.Count).ToListAsync(); + var ret = await QueryInternal(req).Take(req.Count).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } /// public async Task SetSiteMsgStatusAsync(UpdateSiteMsgFlagReq req) { - if (!await ExistAsync(new QueryReq { Filter = new QuerySiteMsgReq { Id = req.SiteMsgId } })) { + if (!await ExistAsync(new QueryReq { Filter = new QuerySiteMsgReq { Id = req.SiteMsgId } }) + .ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.站内信不存在); } try { - _ = await siteMsgFlagService.CreateAsync(req with { UserId = contextUserInfo.Id }); + _ = await siteMsgFlagService.CreateAsync(req with { UserId = contextUserInfo.Id }).ConfigureAwait(false); } catch { - _ = await siteMsgFlagService.UpdateAsync(req with { UserId = contextUserInfo.Id }); + _ = await siteMsgFlagService.UpdateAsync(req with { UserId = contextUserInfo.Id }).ConfigureAwait(false); } } @@ -145,46 +149,50 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs var subtract = await Rpo.Orm.Select() .Where(a => a.UserId == contextUserInfo.Id && a.UserSiteMsgStatus == UserSiteMsgStatues.Read) - .CountAsync(); + .CountAsync() + .ConfigureAwait(false); - return await QueryMineInternal(new QueryReq()).CountAsync() - subtract; + return await QueryMineInternal(new QueryReq()).CountAsync().ConfigureAwait(false) - subtract; } /// public async Task UpdateAsync(UpdateSiteMsgReq req) { - await CreateUpdateCheckAsync(req); + await CreateUpdateCheckAsync(req).ConfigureAwait(false); // 主表 var entity = req.Adapt(); - _ = await Rpo.UpdateDiy.SetSource(entity).ExecuteAffrowsAsync(); + _ = await Rpo.UpdateDiy.SetSource(entity).ExecuteAffrowsAsync().ConfigureAwait(false); // 分表 - await Rpo.SaveManyAsync(entity, nameof(entity.Roles)); + await Rpo.SaveManyAsync(entity, nameof(entity.Roles)).ConfigureAwait(false); // 分表 - await Rpo.SaveManyAsync(entity, nameof(entity.Users)); + await Rpo.SaveManyAsync(entity, nameof(entity.Users)).ConfigureAwait(false); // 分表 - await Rpo.SaveManyAsync(entity, nameof(entity.Depts)); + await Rpo.SaveManyAsync(entity, nameof(entity.Depts)).ConfigureAwait(false); - return (await QueryAsync(new QueryReq { Filter = new QuerySiteMsgReq { Id = req.Id } })) - .First(); + return (await QueryAsync(new QueryReq { Filter = new QuerySiteMsgReq { Id = req.Id } }) + .ConfigureAwait(false)).First(); } /// protected override async Task UpdateForSqliteAsync(Sys_SiteMsg req) { - return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0 + return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0 ? null - : await GetAsync(new QuerySiteMsgReq { Id = req.Id }); + : await GetAsync(new QuerySiteMsgReq { Id = req.Id }).ConfigureAwait(false); } private async Task CreateUpdateCheckAsync(CreateSiteMsgReq req) { // 检查角色是否存在 if (!req.RoleIds.NullOrEmpty()) { - var roles = await Rpo.Orm.Select().Where(a => req.RoleIds.Contains(a.Id)).ToListAsync(a => a.Id); + var roles = await Rpo.Orm.Select() + .Where(a => req.RoleIds.Contains(a.Id)) + .ToListAsync(a => a.Id) + .ConfigureAwait(false); if (roles.Count != req.RoleIds.Count) { throw new NetAdminInvalidOperationException(Ln.角色不存在); } @@ -192,7 +200,10 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs if (!req.DeptIds.NullOrEmpty()) { // 检查部门是否存在 - var depts = await Rpo.Orm.Select().Where(a => req.DeptIds.Contains(a.Id)).ToListAsync(a => a.Id); + var depts = await Rpo.Orm.Select() + .Where(a => req.DeptIds.Contains(a.Id)) + .ToListAsync(a => a.Id) + .ConfigureAwait(false); if (depts.Count != req.DeptIds.Count) { throw new NetAdminInvalidOperationException(Ln.部门不存在); } @@ -200,7 +211,10 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs if (!req.UserIds.NullOrEmpty()) { // 检查用户是否存在 - var users = await Rpo.Orm.Select().Where(a => req.UserIds.Contains(a.Id)).ToListAsync(a => a.Id); + var users = await Rpo.Orm.Select() + .Where(a => req.UserIds.Contains(a.Id)) + .ToListAsync(a => a.Id) + .ConfigureAwait(false); if (users.Count != req.UserIds.Count) { throw new NetAdminInvalidOperationException(Ln.用户不存在); } @@ -233,7 +247,8 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs a.Value.Item2.UserName) , Avatar = a.Max(a.Value.Item2.Avatar) } - }); + }) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs index 8754ec6b..b9caf13b 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs @@ -17,7 +17,7 @@ public sealed class SiteMsgUserService(DefaultRepository rpo) / { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -26,7 +26,7 @@ public sealed class SiteMsgUserService(DefaultRepository rpo) / /// public async Task CreateAsync(CreateSiteMsgUserReq req) { - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } @@ -45,14 +45,20 @@ public sealed class SiteMsgUserService(DefaultRepository rpo) / /// public async Task GetAsync(QuerySiteMsgUserReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await QueryInternal(req).Page(req.Page, req.PageSize).Count(out var total).ToListAsync(); + var list = await QueryInternal(req) + .Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync() + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -61,7 +67,7 @@ public sealed class SiteMsgUserService(DefaultRepository rpo) / /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).Take(req.Count).ToListAsync(); + var ret = await QueryInternal(req).Take(req.Count).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } @@ -69,19 +75,19 @@ public sealed class SiteMsgUserService(DefaultRepository rpo) / public async Task UpdateAsync(UpdateSiteMsgUserReq req) { if (Rpo.Orm.Ado.DataType == DataType.Sqlite) { - return await UpdateForSqliteAsync(req) as QuerySiteMsgUserRsp; + return await UpdateForSqliteAsync(req).ConfigureAwait(false) as QuerySiteMsgUserRsp; } - var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync(); + var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync().ConfigureAwait(false); return ret.FirstOrDefault()?.Adapt(); } /// protected override async Task UpdateForSqliteAsync(Sys_SiteMsgUser req) { - return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0 + return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0 ? null - : await GetAsync(new QuerySiteMsgUserReq { Id = req.Id }); + : await GetAsync(new QuerySiteMsgUserReq { Id = req.Id }).ConfigureAwait(false); } private ISelect QueryInternal(QueryReq req) diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs index 1d7d4381..a43b3574 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs @@ -18,7 +18,7 @@ public sealed class UserProfileService(DefaultRepository rpo) / { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -28,7 +28,7 @@ public sealed class UserProfileService(DefaultRepository rpo) / public async Task CreateAsync(CreateUserProfileReq req) { var entity = req.Adapt(); - var ret = await Rpo.InsertAsync(entity); + var ret = await Rpo.InsertAsync(entity).ConfigureAwait(false); return ret.Adapt(); } @@ -47,7 +47,9 @@ public sealed class UserProfileService(DefaultRepository rpo) / /// public async Task GetAsync(QueryUserProfileReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } @@ -63,7 +65,8 @@ public sealed class UserProfileService(DefaultRepository rpo) / , c = new { c.Key, c.Value } , d = new { d.Key, d.Value } , e = new { e.Key, e.Value } - }); + }) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.ConvertAll( @@ -87,7 +90,8 @@ public sealed class UserProfileService(DefaultRepository rpo) / , c = new { c.Key, c.Value } , d = new { d.Key, d.Value } , e = new { e.Key, e.Value } - }); + }) + .ConfigureAwait(false); return ret.ConvertAll(x => x.a.Adapt() with { NationArea = x.b.Key == null @@ -113,19 +117,19 @@ public sealed class UserProfileService(DefaultRepository rpo) / { var entity = req.Adapt(); if (Rpo.Orm.Ado.DataType == DataType.Sqlite) { - return await UpdateForSqliteAsync(entity) as QueryUserProfileRsp; + return await UpdateForSqliteAsync(entity).ConfigureAwait(false) as QueryUserProfileRsp; } - var ret = await Rpo.UpdateDiy.SetSource(entity).ExecuteUpdatedAsync(); + var ret = await Rpo.UpdateDiy.SetSource(entity).ExecuteUpdatedAsync().ConfigureAwait(false); return ret.FirstOrDefault()?.Adapt(); } /// protected override async Task UpdateForSqliteAsync(Sys_UserProfile req) { - return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0 + return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0 ? null - : await GetAsync(new QueryUserProfileReq { Id = req.Id }); + : await GetAsync(new QueryUserProfileReq { Id = req.Id }).ConfigureAwait(false); } private ISelect QueryInternal( diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs index a644456c..e0f90d06 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs @@ -39,7 +39,7 @@ public sealed class UserService(DefaultRepository rpo / { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -48,30 +48,33 @@ public sealed class UserService(DefaultRepository rpo / /// public async Task CheckMobileAvailableAsync(CheckMobileAvailableReq req) { - return !await Rpo.Select.Where(a => a.Mobile == req.Mobile && a.Id != req.Id).AnyAsync(); + return !await Rpo.Select.Where(a => a.Mobile == req.Mobile && a.Id != req.Id).AnyAsync().ConfigureAwait(false); } /// public async Task CheckUserNameAvailableAsync(CheckUserNameAvailableReq req) { - return !await Rpo.Select.Where(a => a.UserName == req.UserName && a.Id != req.Id).AnyAsync(); + return !await Rpo.Select.Where(a => a.UserName == req.UserName && a.Id != req.Id) + .AnyAsync() + .ConfigureAwait(false); } /// public async Task CreateAsync(CreateUserReq req) { - await CreateUpdateCheckAsync(req); + await CreateUpdateCheckAsync(req).ConfigureAwait(false); // 主表 var entity = req.Adapt(); - var dbUser = await Rpo.InsertAsync(entity); + var dbUser = await Rpo.InsertAsync(entity).ConfigureAwait(false); // 分表 - await Rpo.SaveManyAsync(entity, nameof(entity.Roles)); + await Rpo.SaveManyAsync(entity, nameof(entity.Roles)).ConfigureAwait(false); // 档案表 - _ = await userProfileService.CreateAsync(req.Profile with { Id = dbUser.Id }); - var ret = await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = dbUser.Id } }); + _ = await userProfileService.CreateAsync(req.Profile with { Id = dbUser.Id }).ConfigureAwait(false); + var ret = await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = dbUser.Id } }) + .ConfigureAwait(false); return ret.First(); } @@ -81,13 +84,15 @@ public sealed class UserService(DefaultRepository rpo / var effect = 0; // 删除主表 - effect += await Rpo.DeleteAsync(req.Id); + effect += await Rpo.DeleteAsync(req.Id).ConfigureAwait(false); // 删除分表 - effect += await Rpo.Orm.Delete(new { UserId = req.Id }).ExecuteAffrowsAsync(); + effect += await Rpo.Orm.Delete(new { UserId = req.Id }) + .ExecuteAffrowsAsync() + .ConfigureAwait(false); // 删除档案表 - effect += await userProfileService.DeleteAsync(req); + effect += await userProfileService.DeleteAsync(req).ConfigureAwait(false); return effect; } @@ -95,13 +100,15 @@ public sealed class UserService(DefaultRepository rpo / /// public async Task ExistAsync(QueryReq req) { - return await (await QueryInternalAsync(req)).AnyAsync(); + return await (await QueryInternalAsync(req).ConfigureAwait(false)).AnyAsync().ConfigureAwait(false); } /// public async Task GetAsync(QueryUserReq req) { - var ret = await (await QueryInternalAsync(new QueryReq { Filter = req })).ToOneAsync(); + var ret = await (await QueryInternalAsync(new QueryReq { Filter = req }).ConfigureAwait(false)) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } @@ -109,8 +116,12 @@ public sealed class UserService(DefaultRepository rpo / public async Task GetForUpdateAsync(QueryUserReq req) { // ReSharper disable once MethodHasAsyncOverload - return (await QueryInternal(new QueryReq { Filter = req }).ForUpdate().ToOneAsync()) - .Adapt(); + #pragma warning disable VSTHRD103 + return (await QueryInternal(new QueryReq { Filter = req }) + #pragma warning restore VSTHRD103 + .ForUpdate() + .ToOneAsync() + .ConfigureAwait(false)).Adapt(); } /// @@ -123,12 +134,16 @@ public sealed class UserService(DefaultRepository rpo / #pragma warning disable IDE0045 if (new MobileAttribute().IsValid(req.Account)) { #pragma warning restore IDE0045 - dbUser = await Rpo.Where(a => a.Mobile == req.Account && a.Password == pwd).ToOneAsync(); + dbUser = await Rpo.Where(a => a.Mobile == req.Account && a.Password == pwd) + .ToOneAsync() + .ConfigureAwait(false); } else { dbUser = new EmailAddressAttribute().IsValid(req.Account) - ? await Rpo.Where(a => a.Email == req.Account && a.Password == pwd).ToOneAsync() - : await Rpo.Where(a => a.UserName == req.Account && a.Password == pwd).ToOneAsync(); + ? await Rpo.Where(a => a.Email == req.Account && a.Password == pwd).ToOneAsync().ConfigureAwait(false) + : await Rpo.Where(a => a.UserName == req.Account && a.Password == pwd) + .ToOneAsync() + .ConfigureAwait(false); } return dbUser == null ? throw new NetAdminInvalidOperationException(Ln.用户名或密码错误) : LoginInternal(dbUser); @@ -139,27 +154,30 @@ public sealed class UserService(DefaultRepository rpo / /// 用户不存在 public async Task LoginBySmsAsync(LoginBySmsReq req) { - if (!await verifyCodeService.VerifyAsync(req.Adapt())) { + if (!await verifyCodeService.VerifyAsync(req.Adapt()).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.验证码不正确); } - var dbUser = await Rpo.Where(a => a.Mobile == req.DestDevice).ToOneAsync(); + var dbUser = await Rpo.Where(a => a.Mobile == req.DestDevice).ToOneAsync().ConfigureAwait(false); return dbUser == null ? throw new NetAdminInvalidOperationException(Ln.用户不存在) : LoginInternal(dbUser); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await (await QueryInternalAsync(req)).Page(req.Page, req.PageSize) - .Count(out var total) - .ToListAsync(_selectUserFields); + var list = await (await QueryInternalAsync(req).ConfigureAwait(false)).Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync(_selectUserFields) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// public async Task> QueryAsync(QueryReq req) { - var list = await (await QueryInternalAsync(req)).Take(req.Count).ToListAsync(_selectUserFields); + var list = await (await QueryInternalAsync(req).ConfigureAwait(false)).Take(req.Count) + .ToListAsync(_selectUserFields) + .ConfigureAwait(false); return list.Adapt>(); } @@ -173,12 +191,12 @@ public sealed class UserService(DefaultRepository rpo / /// 验证码不正确 public async Task RegisterAsync(RegisterUserReq req) { - if (!await verifyCodeService.VerifyAsync(req.VerifySmsCodeReq)) { + if (!await verifyCodeService.VerifyAsync(req.VerifySmsCodeReq).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.验证码不正确); } var createReq = req.Adapt() with { Profile = new CreateUserProfileReq() }; - return (await CreateAsync(createReq)).Adapt(); + return (await CreateAsync(createReq).ConfigureAwait(false)).Adapt(); } /// @@ -186,15 +204,17 @@ public sealed class UserService(DefaultRepository rpo / /// 用户不存在 public async Task ResetPasswordAsync(ResetPasswordReq req) { - return !await verifyCodeService.VerifyAsync(req.VerifySmsCodeReq) + return !await verifyCodeService.VerifyAsync(req.VerifySmsCodeReq).ConfigureAwait(false) ? throw new NetAdminInvalidOperationException(Ln.验证码不正确) : (uint)await Rpo.UpdateDiy .SetSource((await Rpo.Where(a => a.Mobile == req.VerifySmsCodeReq.DestDevice) - .ToOneAsync(a => new { a.Version, a.Id })).Adapt() with { + .ToOneAsync(a => new { a.Version, a.Id }) + .ConfigureAwait(false)).Adapt() with { Password = req.PasswordText.Pwd().Guid() }) .UpdateColumns(a => a.Password) - .ExecuteAffrowsAsync(); + .ExecuteAffrowsAsync() + .ConfigureAwait(false); } /// @@ -206,16 +226,17 @@ public sealed class UserService(DefaultRepository rpo / , Version = Rpo.Where(a => a.Id == UserToken.Id).ToOne(a => a.Version) }) .UpdateColumns(a => a.Avatar) - .ExecuteAffrowsAsync() <= 0) { + .ExecuteAffrowsAsync() + .ConfigureAwait(false) <= 0) { throw new NetAdminUnexpectedException(); } - var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } })) - .First() - .Adapt(); + var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }) + .ConfigureAwait(false)).First() + .Adapt(); // 发布用户更新事件 - await eventPublisher.PublishAsync(new UserUpdatedEvent(ret)); + await eventPublisher.PublishAsync(new UserUpdatedEvent(ret)).ConfigureAwait(false); return ret; } @@ -226,7 +247,7 @@ public sealed class UserService(DefaultRepository rpo / // 如果已绑定手机号、需要手机安全验证 if (!user.Mobile.NullOrEmpty()) { - if (!await verifyCodeService.VerifyAsync(req.VerifySmsCodeReq)) { + if (!await verifyCodeService.VerifyAsync(req.VerifySmsCodeReq).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.验证码不正确); } @@ -238,27 +259,30 @@ public sealed class UserService(DefaultRepository rpo / if (await Rpo.UpdateDiy .SetSource(new Sys_User { Email = req.DestDevice, Id = UserToken.Id, Version = user.Version }) .UpdateColumns(a => a.Email) - .ExecuteAffrowsAsync() <= 0) { + .ExecuteAffrowsAsync() + .ConfigureAwait(false) <= 0) { throw new NetAdminUnexpectedException(); } - var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } })) - .First() - .Adapt(); + var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }) + .ConfigureAwait(false)).First() + .Adapt(); // 发布用户更新事件 - await eventPublisher.PublishAsync(new UserUpdatedEvent(ret)); + await eventPublisher.PublishAsync(new UserUpdatedEvent(ret)).ConfigureAwait(false); return ret; } /// public async Task SetMobileAsync(SetMobileReq req) { - var user = await Rpo.Where(a => a.Id == UserToken.Id).ToOneAsync(a => new { a.Version, a.Mobile }); + var user = await Rpo.Where(a => a.Id == UserToken.Id) + .ToOneAsync(a => new { a.Version, a.Mobile }) + .ConfigureAwait(false); if (!user.Mobile.NullOrEmpty()) { // 已有手机号,需验证旧手机 - if (!await verifyCodeService.VerifyAsync(req.OriginVerifySmsCodeReq)) { + if (!await verifyCodeService.VerifyAsync(req.OriginVerifySmsCodeReq).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException($"{Ln.旧手机号码验证码不正确}"); } @@ -268,7 +292,7 @@ public sealed class UserService(DefaultRepository rpo / } // 验证新手机号 - if (!await verifyCodeService.VerifyAsync(req.NewVerifySmsCodeReq)) { + if (!await verifyCodeService.VerifyAsync(req.NewVerifySmsCodeReq).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException($"{Ln.新手机号码验证码不正确}"); } @@ -279,16 +303,17 @@ public sealed class UserService(DefaultRepository rpo / , Mobile = req.NewVerifySmsCodeReq.DestDevice }) .UpdateColumns(a => a.Mobile) - .ExecuteAffrowsAsync() <= 0) { + .ExecuteAffrowsAsync() + .ConfigureAwait(false) <= 0) { throw new NetAdminUnexpectedException(); } - var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } })) - .First() - .Adapt(); + var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }) + .ConfigureAwait(false)).First() + .Adapt(); // 发布用户更新事件 - await eventPublisher.PublishAsync(new UserUpdatedEvent(ret)); + await eventPublisher.PublishAsync(new UserUpdatedEvent(ret)).ConfigureAwait(false); return ret; } @@ -296,7 +321,8 @@ public sealed class UserService(DefaultRepository rpo / public async Task SetPasswordAsync(SetPasswordReq req) { var version = await Rpo.Where(a => a.Id == UserToken.Id && a.Password == req.OldPassword.Pwd().Guid()) - .ToOneAsync(a => new long?(a.Version)); + .ToOneAsync(a => new long?(a.Version)) + .ConfigureAwait(false); if (version != null) { var ret = await Rpo.UpdateDiy .SetSource(new Sys_User { @@ -305,7 +331,8 @@ public sealed class UserService(DefaultRepository rpo / , Version = version.Value }) .UpdateColumns(a => a.Password) - .ExecuteAffrowsAsync(); + .ExecuteAffrowsAsync() + .ConfigureAwait(false); return ret <= 0 ? throw new NetAdminUnexpectedException() : (uint)ret; } @@ -315,7 +342,7 @@ public sealed class UserService(DefaultRepository rpo / /// public async Task UpdateAsync(UpdateUserReq req) { - await CreateUpdateCheckAsync(req); + await CreateUpdateCheckAsync(req).ConfigureAwait(false); // 主表 var entity = req.Adapt(); @@ -324,18 +351,22 @@ public sealed class UserService(DefaultRepository rpo / ignoreCols.Add(nameof(Sys_User.Password)); } - _ = await Rpo.UpdateDiy.SetSource(entity).IgnoreColumns(ignoreCols.ToArray()).ExecuteAffrowsAsync(); + _ = await Rpo.UpdateDiy.SetSource(entity) + .IgnoreColumns(ignoreCols.ToArray()) + .ExecuteAffrowsAsync() + .ConfigureAwait(false); // 档案表 - _ = await userProfileService.UpdateAsync(req.Profile); + _ = await userProfileService.UpdateAsync(req.Profile).ConfigureAwait(false); // 分表 - await Rpo.SaveManyAsync(entity, nameof(entity.Roles)); + await Rpo.SaveManyAsync(entity, nameof(entity.Roles)).ConfigureAwait(false); - var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = req.Id } })).First(); + var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = req.Id } }) + .ConfigureAwait(false)).First(); // 发布用户更新事件 - await eventPublisher.PublishAsync(new UserUpdatedEvent(ret.Adapt())); + await eventPublisher.PublishAsync(new UserUpdatedEvent(ret.Adapt())).ConfigureAwait(false); return ret; } @@ -356,7 +387,8 @@ public sealed class UserService(DefaultRepository rpo / .IncludeMany(a => a.Menus) .IncludeMany(a => a.Depts) .IncludeMany(a => a.Apis)) - .ToOneAsync(); + .ToOneAsync() + .ConfigureAwait(false); return dbUser.Adapt(); } @@ -388,13 +420,18 @@ public sealed class UserService(DefaultRepository rpo / var roles = await Rpo.Orm.Select() .ForUpdate() .Where(a => req.RoleIds.Contains(a.Id)) - .ToListAsync(a => a.Id); + .ToListAsync(a => a.Id) + .ConfigureAwait(false); if (roles.Count != req.RoleIds.Count) { throw new NetAdminInvalidOperationException(Ln.角色不存在); } // 检查部门是否存在 - var dept = await Rpo.Orm.Select().ForUpdate().Where(a => req.DeptId == a.Id).ToListAsync(a => a.Id); + var dept = await Rpo.Orm.Select() + .ForUpdate() + .Where(a => req.DeptId == a.Id) + .ToListAsync(a => a.Id) + .ConfigureAwait(false); if (dept.Count != 1) { throw new NetAdminInvalidOperationException(Ln.部门不存在); @@ -420,7 +457,8 @@ public sealed class UserService(DefaultRepository rpo / deptIds = await Rpo.Orm.Select() .Where(a => a.Id == req.Filter.DeptId) .AsTreeCte() - .ToListAsync(a => a.Id); + .ToListAsync(a => a.Id) + .ConfigureAwait(false); } var ret = Rpo.Select.Include(a => a.Dept) diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs index f2a8ee1f..60c8b48e 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs @@ -21,7 +21,7 @@ public sealed class VerifyCodeService(DefaultRepository rpo, IEv { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -30,12 +30,12 @@ public sealed class VerifyCodeService(DefaultRepository rpo, IEv /// public async Task CreateAsync(CreateVerifyCodeReq req) { - var entity = await Rpo.InsertAsync(req); + var entity = await Rpo.InsertAsync(req).ConfigureAwait(false); var ret = entity.Adapt(); // 发布验证码创建事件 - await eventPublisher.PublishAsync(new VerifyCodeCreatedEvent(ret)); + await eventPublisher.PublishAsync(new VerifyCodeCreatedEvent(ret)).ConfigureAwait(false); return ret; } @@ -55,14 +55,20 @@ public sealed class VerifyCodeService(DefaultRepository rpo, IEv /// public async Task GetAsync(QueryVerifyCodeReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await QueryInternal(req).Page(req.Page, req.PageSize).Count(out var total).ToListAsync(); + var list = await QueryInternal(req) + .Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync() + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -71,14 +77,14 @@ public sealed class VerifyCodeService(DefaultRepository rpo, IEv /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).Take(req.Count).ToListAsync(); + var ret = await QueryInternal(req).Take(req.Count).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } /// public async Task SendVerifyCodeAsync(SendVerifyCodeReq req) { - var lastSent = await GetLastSentAsync(req.DestDevice); + var lastSent = await GetLastSentAsync(req.DestDevice).ConfigureAwait(false); QueryVerifyCodeRsp ret; @@ -90,11 +96,12 @@ public sealed class VerifyCodeService(DefaultRepository rpo, IEv #endif if (lastSent != null && lastSent.Status != VerifyCodeStatues.Verified) { // 上次发送未验证,生成相同code - ret = await CreateAsync(req.Adapt() with { Code = lastSent.Code }); + ret = await CreateAsync(req.Adapt() with { Code = lastSent.Code }) + .ConfigureAwait(false); } else { // 生成新的code var code = _randRange.Rand().ToString(CultureInfo.InvariantCulture).PadLeft(4, '0'); - ret = await CreateAsync(req.Adapt() with { Code = code }); + ret = await CreateAsync(req.Adapt() with { Code = code }).ConfigureAwait(false); } return ret.Adapt(); @@ -104,10 +111,10 @@ public sealed class VerifyCodeService(DefaultRepository rpo, IEv public async Task UpdateAsync(UpdateVerifyCodeReq req) { if (Rpo.Orm.Ado.DataType == DataType.Sqlite) { - return await UpdateForSqliteAsync(req) as QueryVerifyCodeRsp; + return await UpdateForSqliteAsync(req).ConfigureAwait(false) as QueryVerifyCodeRsp; } - var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync(); + var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync().ConfigureAwait(false); return ret.FirstOrDefault()?.Adapt(); } @@ -123,14 +130,15 @@ public sealed class VerifyCodeService(DefaultRepository rpo, IEv return true; } - var lastSent = await GetLastSentAsync(req.DestDevice); + var lastSent = await GetLastSentAsync(req.DestDevice).ConfigureAwait(false); if (lastSent is not { Status: VerifyCodeStatues.Sent } || req.Code != lastSent.Code || (DateTime.UtcNow - lastSent.CreatedTime).TotalMinutes > 10) { return false; } - _ = await UpdateAsync((lastSent with { Status = VerifyCodeStatues.Verified }).Adapt()); + _ = await UpdateAsync((lastSent with { Status = VerifyCodeStatues.Verified }).Adapt()) + .ConfigureAwait(false); return true; } @@ -138,9 +146,9 @@ public sealed class VerifyCodeService(DefaultRepository rpo, IEv /// protected override async Task UpdateForSqliteAsync(Sys_VerifyCode req) { - return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0 + return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0 ? null - : await GetAsync(new QueryVerifyCodeReq { Id = req.Id }); + : await GetAsync(new QueryVerifyCodeReq { Id = req.Id }).ConfigureAwait(false); } private Task GetLastSentAsync(string destDevice) diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs index 368b2917..fd57cc16 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs @@ -17,7 +17,7 @@ public sealed class ExampleService(DefaultRepository rpo) // { var sum = 0; foreach (var item in req.Items) { - sum += await DeleteAsync(item); + sum += await DeleteAsync(item).ConfigureAwait(false); } return sum; @@ -26,7 +26,7 @@ public sealed class ExampleService(DefaultRepository rpo) // /// public async Task CreateAsync(CreateExampleReq req) { - var ret = await Rpo.InsertAsync(req); + var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } @@ -45,14 +45,20 @@ public sealed class ExampleService(DefaultRepository rpo) // /// public async Task GetAsync(QueryExampleReq req) { - var ret = await QueryInternal(new QueryReq { Filter = req }).ToOneAsync(); + var ret = await QueryInternal(new QueryReq { Filter = req }) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// public async Task> PagedQueryAsync(PagedQueryReq req) { - var list = await QueryInternal(req).Page(req.Page, req.PageSize).Count(out var total).ToListAsync(); + var list = await QueryInternal(req) + .Page(req.Page, req.PageSize) + .Count(out var total) + .ToListAsync() + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total , list.Adapt>()); @@ -61,7 +67,7 @@ public sealed class ExampleService(DefaultRepository rpo) // /// public async Task> QueryAsync(QueryReq req) { - var ret = await QueryInternal(req).Take(req.Count).ToListAsync(); + var ret = await QueryInternal(req).Take(req.Count).ToListAsync().ConfigureAwait(false); return ret.Adapt>(); } @@ -69,19 +75,19 @@ public sealed class ExampleService(DefaultRepository rpo) // public async Task UpdateAsync(UpdateExampleReq req) { if (Rpo.Orm.Ado.DataType == DataType.Sqlite) { - return await UpdateForSqliteAsync(req) as QueryExampleRsp; + return await UpdateForSqliteAsync(req).ConfigureAwait(false) as QueryExampleRsp; } - var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync(); + var ret = await Rpo.UpdateDiy.SetSource(req).ExecuteUpdatedAsync().ConfigureAwait(false); return ret.FirstOrDefault()?.Adapt(); } /// protected override async Task UpdateForSqliteAsync(Tpl_Example req) { - return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync() <= 0 + return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0 ? null - : await GetAsync(new QueryExampleReq { Id = req.Id }); + : await GetAsync(new QueryExampleReq { Id = req.Id }).ConfigureAwait(false); } private ISelect QueryInternal(QueryReq req) diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs index 9cff4b7f..07fd42ef 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs @@ -12,9 +12,10 @@ public sealed class CaptchaCache(IDistributedCache cache, ICaptchaService servic /// public async Task GetCaptchaImageAsync() { - var captchaRsp = await Service.GetCaptchaImageAsync(); + var captchaRsp = await Service.GetCaptchaImageAsync().ConfigureAwait(false); await CreateAsync(GetCacheKey(captchaRsp.Id, nameof(CaptchaCache)), captchaRsp.SawOffsetX -, TimeSpan.FromMinutes(1)); +, TimeSpan.FromMinutes(1)) + .ConfigureAwait(false); return captchaRsp; } @@ -22,10 +23,10 @@ public sealed class CaptchaCache(IDistributedCache cache, ICaptchaService servic /// 人机验证未通过 public async Task VerifyCaptchaAndRemoveAsync(VerifyCaptchaReq req) { - var ret = await VerifyCaptchaAsync(req); + var ret = await VerifyCaptchaAsync(req).ConfigureAwait(false); if (ret) { // 人机验证通过,删除人机验证缓存 - await RemoveAsync(GetCacheKey(req.Id, nameof(CaptchaCache))); + await RemoveAsync(GetCacheKey(req.Id, nameof(CaptchaCache))).ConfigureAwait(false); } else { throw new NetAdminInvalidOperationException(Ln.人机验证未通过); @@ -35,7 +36,7 @@ public sealed class CaptchaCache(IDistributedCache cache, ICaptchaService servic /// public async Task VerifyCaptchaAsync(VerifyCaptchaReq req) { - var val = await GetAsync(GetCacheKey(req.Id, nameof(CaptchaCache))); - return await Service.VerifyCaptchaAsync(req with { SawOffsetX = val }); + var val = await GetAsync(GetCacheKey(req.Id, nameof(CaptchaCache))).ConfigureAwait(false); + return await Service.VerifyCaptchaAsync(req with { SawOffsetX = val }).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/UserCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/UserCache.cs index 91936a27..7622bafd 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/UserCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/UserCache.cs @@ -153,9 +153,9 @@ public sealed class UserCache(IDistributedCache cache, IUserService service, IVe /// public async Task SetEmailAsync(SetEmailReq req) { - return !await verifyCodeCache.VerifyAsync(req) + return !await verifyCodeCache.VerifyAsync(req).ConfigureAwait(false) ? throw new NetAdminInvalidOperationException(Ln.邮箱验证码不正确) - : await Service.SetEmailAsync(req); + : await Service.SetEmailAsync(req).ConfigureAwait(false); } /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs index 102b19d3..071c7847 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs @@ -86,7 +86,7 @@ public sealed class UserController [Transaction] public async Task LoginByPwdAsync(LoginByPwdReq req) { - var ret = await Cache.LoginByPwdAsync(req); + var ret = await Cache.LoginByPwdAsync(req).ConfigureAwait(false); ret.SetToRspHeader(); return ret; } @@ -98,7 +98,7 @@ public sealed class UserController [Transaction] public async Task LoginBySmsAsync(LoginBySmsReq req) { - var ret = await Cache.LoginBySmsAsync(req); + var ret = await Cache.LoginBySmsAsync(req).ConfigureAwait(false); ret.SetToRspHeader(); return ret; } @@ -134,7 +134,7 @@ public sealed class UserController [AllowAnonymous] public async Task RegisterAsync(RegisterUserReq req) { - var config = await configCache.GetLatestConfigAsync(); + var config = await configCache.GetLatestConfigAsync().ConfigureAwait(false); return await Cache.RegisterAsync(req with { DeptId = config.UserRegisterDeptId @@ -142,7 +142,8 @@ public sealed class UserController , Profile = new CreateUserProfileReq() , Enabled = !config.UserRegisterConfirm , Mobile = req.VerifySmsCodeReq.DestDevice - }); + }) + .ConfigureAwait(false); } /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs index 3b3998a4..76cdd777 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs @@ -72,8 +72,8 @@ public sealed class VerifyCodeController [AllowAnonymous] public async Task SendVerifyCodeAsync(SendVerifyCodeReq req) { - await captchaCache.VerifyCaptchaAndRemoveAsync(req.VerifyCaptchaReq); - return await Cache.SendVerifyCodeAsync(req); + await captchaCache.VerifyCaptchaAndRemoveAsync(req.VerifyCaptchaReq).ConfigureAwait(false); + return await Cache.SendVerifyCodeAsync(req).ConfigureAwait(false); } /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Subscribers/ApiSynchronizer.cs b/src/backend/NetAdmin.SysComponent.Host/Subscribers/ApiSynchronizer.cs index d439bc3c..4009baf8 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Subscribers/ApiSynchronizer.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Subscribers/ApiSynchronizer.cs @@ -15,7 +15,7 @@ public sealed class ApiSynchronizer(ILogger logger) : IEventSub public async Task SyncApiAsync(EventHandlerExecutingContext _) { var logService = App.GetService(); - await logService.SyncAsync(); + await logService.SyncAsync().ConfigureAwait(false); logger.Info($"{nameof(IApiService)}.{nameof(IApiService.SyncAsync)} {Ln.已完成}"); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Host/Subscribers/CacheCleaner.cs b/src/backend/NetAdmin.SysComponent.Host/Subscribers/CacheCleaner.cs index 94c50866..c0f45c61 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Subscribers/CacheCleaner.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Subscribers/CacheCleaner.cs @@ -26,6 +26,6 @@ public sealed class CacheCleaner : IEventSubscriber var cache = App.GetService(); cache.Service.UserToken = ContextUserToken.Create(userUpdatedEvent.Data); - await cache.RemoveUserInfoAsync(); + await cache.RemoveUserInfoAsync().ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Host/Subscribers/EmailCodeSender.cs b/src/backend/NetAdmin.SysComponent.Host/Subscribers/EmailCodeSender.cs index 9dbeb7f5..d63f94da 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Subscribers/EmailCodeSender.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Subscribers/EmailCodeSender.cs @@ -24,7 +24,10 @@ public sealed class EmailCodeSender(ILogger logger) : IEventSub // 发送... var verifyCodeService = App.GetService(); _ = await verifyCodeService.UpdateAsync( - verifyCodeCreatedEvent.Data.Adapt() with { Status = VerifyCodeStatues.Sent }); + verifyCodeCreatedEvent.Data.Adapt() with { + Status = VerifyCodeStatues.Sent + }) + .ConfigureAwait(false); logger.Info($"{nameof(IVerifyCodeService)}.{nameof(IVerifyCodeService.UpdateAsync)} {Ln.已完成}"); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Host/Subscribers/OperationLogger.cs b/src/backend/NetAdmin.SysComponent.Host/Subscribers/OperationLogger.cs index b9473359..89353cfe 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Subscribers/OperationLogger.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Subscribers/OperationLogger.cs @@ -41,6 +41,6 @@ public sealed class OperationLogger : IEventSubscriber logReq ??= operationEvent.Data; var logService = App.GetService(); logReq.TruncateStrings(); - _ = await logService.CreateAsync(logReq); + _ = await logService.CreateAsync(logReq).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Host/Subscribers/SmsCodeSender.cs b/src/backend/NetAdmin.SysComponent.Host/Subscribers/SmsCodeSender.cs index 81f7e826..6665b580 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Subscribers/SmsCodeSender.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Subscribers/SmsCodeSender.cs @@ -24,7 +24,10 @@ public sealed class SmsCodeSender(ILogger logger) : IEventSubscri // 发送... var verifyCodeService = App.GetService(); _ = await verifyCodeService.UpdateAsync( - verifyCodeCreatedEvent.Data.Adapt() with { Status = VerifyCodeStatues.Sent }); + verifyCodeCreatedEvent.Data.Adapt() with { + Status = VerifyCodeStatues.Sent + }) + .ConfigureAwait(false); logger.Info($"{nameof(IVerifyCodeService)}.{nameof(IVerifyCodeService.UpdateAsync)} {Ln.已完成}"); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Tests/WebApiTestBase.cs b/src/backend/NetAdmin.Tests/WebApiTestBase.cs index 088aed21..43ee7f3a 100644 --- a/src/backend/NetAdmin.Tests/WebApiTestBase.cs +++ b/src/backend/NetAdmin.Tests/WebApiTestBase.cs @@ -30,14 +30,16 @@ public abstract class WebApiTestBase if (_accessToken == null) { var loginRsp = await client.PostAsync(_API_SYS_USER_LOGIN_BY_PWD , JsonContent.Create( - new LoginByPwdReq { Password = _PASSWORD, Account = _ACCOUNT })); - var loginRspObj = (await loginRsp.Content.ReadAsStringAsync()).ToObject>(); + new LoginByPwdReq { Password = _PASSWORD, Account = _ACCOUNT })) + .ConfigureAwait(false); + var loginRspObj = (await loginRsp.Content.ReadAsStringAsync().ConfigureAwait(false)) + .ToObject>(); _accessToken = loginRspObj.Data.AccessToken; } client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(_AUTH_SCHEMA, _accessToken); - var ret = await client.PostAsync(url, content); - testOutputHelper.WriteLine(await ret.Content.ReadAsStringAsync()); + var ret = await client.PostAsync(url, content).ConfigureAwait(false); + testOutputHelper.WriteLine(await ret.Content.ReadAsStringAsync().ConfigureAwait(false)); return ret; } } \ No newline at end of file diff --git a/switcher.furion.json b/switcher.furion.json index 4b11b650..4b74a75f 100644 --- a/switcher.furion.json +++ b/switcher.furion.json @@ -9,7 +9,7 @@ "packages": [ { "packageName": "Furion.Pure.NS", - "version": "4.9.1-ns1" + "version": "4.9.1.5-ns1" } ] }