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();