diff --git a/test/NetCorePal.Web/Application/Commands/CreateOrderCommandHandler.cs b/test/NetCorePal.Web/Application/Commands/CreateOrderCommandHandler.cs
index 5c870688..4cb5a2c2 100644
--- a/test/NetCorePal.Web/Application/Commands/CreateOrderCommandHandler.cs
+++ b/test/NetCorePal.Web/Application/Commands/CreateOrderCommandHandler.cs
@@ -9,7 +9,8 @@ namespace NetCorePal.Web.Application.Commands
///
///
///
- public class CreateOrderCommandHandler(IOrderRepository orderRepository, ILogger logger) : ICommandHandler
+ public class CreateOrderCommandHandler(IOrderRepository orderRepository, ILogger logger)
+ : ICommandHandler
{
///
///
@@ -19,10 +20,20 @@ public class CreateOrderCommandHandler(IOrderRepository orderRepository, ILogger
///
public async Task Handle(CreateOrderCommand request, CancellationToken cancellationToken)
{
+ var a = new List();
+ for (int i = 0; i < 1000; i++)
+ {
+ a.Add(i);
+ }
+ await Parallel.ForEachAsync(a, new ParallelOptions(), async (item,c) =>
+ {
+ await Task.Delay(12, c);
+ });
+
var order = new Order(request.Name, request.Count);
order = await orderRepository.AddAsync(order, cancellationToken);
logger.LogInformation("order created, id:{orderId}", order.Id);
return order.Id;
}
}
-}
+}
\ No newline at end of file
diff --git a/test/NetCorePal.Web/HostedServices/CreateOrderCommandBackgroundService.cs b/test/NetCorePal.Web/HostedServices/CreateOrderCommandBackgroundService.cs
index bade8bea..21370825 100644
--- a/test/NetCorePal.Web/HostedServices/CreateOrderCommandBackgroundService.cs
+++ b/test/NetCorePal.Web/HostedServices/CreateOrderCommandBackgroundService.cs
@@ -6,10 +6,24 @@ public class CreateOrderCommandBackgroundService(IServiceProvider serviceProvide
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
- using var scope = serviceProvider.CreateScope();
- var mediator = scope.ServiceProvider.GetRequiredService();
+ while (!stoppingToken.IsCancellationRequested)
+ {
+ using var scope = serviceProvider.CreateScope();
+ var mediator = scope.ServiceProvider.GetRequiredService();
- var command = new CreateOrderCommand("abc", 10, 20);
- await mediator.Send(command, stoppingToken);
+ var distributedLock = scope.ServiceProvider
+ .GetRequiredService();
+ var handler = await distributedLock.TryAcquireAsync("CreateOrderCommandBackgroundService",
+ TimeSpan.FromSeconds(10), stoppingToken);
+ if (handler != null)
+ {
+ await using (handler)
+ {
+ var command = new CreateOrderCommand("abc", 10, 20);
+ await mediator.Send(command, stoppingToken);
+ await Task.Delay(100, stoppingToken);
+ }
+ }
+ }
}
}
\ No newline at end of file
diff --git a/test/NetCorePal.Web/NetCorePal.Web.csproj b/test/NetCorePal.Web/NetCorePal.Web.csproj
index 0642abf3..5b972ab3 100644
--- a/test/NetCorePal.Web/NetCorePal.Web.csproj
+++ b/test/NetCorePal.Web/NetCorePal.Web.csproj
@@ -33,6 +33,8 @@
+
+
diff --git a/test/NetCorePal.Web/Program.cs b/test/NetCorePal.Web/Program.cs
index 75c99006..a8baefa7 100644
--- a/test/NetCorePal.Web/Program.cs
+++ b/test/NetCorePal.Web/Program.cs
@@ -134,7 +134,7 @@
#endregion
builder.Services.AddHostedService();
-
+ builder.Services.AddRedisLocks();
var app = builder.Build();
app.UseContext();
//app.UseKnownExceptionHandler();