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