From a6980252c0dc77f4947182a7ccb1419274259715 Mon Sep 17 00:00:00 2001 From: henry Date: Fri, 16 May 2025 20:36:53 -0400 Subject: [PATCH] thread safety for background service --- .../Services/AccessCleanupBackgroundService.cs | 2 +- AccessQueueService/Services/AccessService.cs | 16 ++++++++++++++-- AccessQueueService/Services/IAccessService.cs | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/AccessQueueService/Services/AccessCleanupBackgroundService.cs b/AccessQueueService/Services/AccessCleanupBackgroundService.cs index 2548563..2cb7e93 100644 --- a/AccessQueueService/Services/AccessCleanupBackgroundService.cs +++ b/AccessQueueService/Services/AccessCleanupBackgroundService.cs @@ -17,7 +17,7 @@ namespace AccessQueueService.Services var cleanupIntervalMillis = _config.GetValue("AccessQueue:CleanupIntervalSeconds") * 1000; while (!stoppingToken.IsCancellationRequested) { - _accessService.DeleteExpiredTickets(); + await _accessService.DeleteExpiredTickets(); await Task.Delay(cleanupIntervalMillis, stoppingToken); } } diff --git a/AccessQueueService/Services/AccessService.cs b/AccessQueueService/Services/AccessService.cs index e5a4609..d0ca150 100644 --- a/AccessQueueService/Services/AccessService.cs +++ b/AccessQueueService/Services/AccessService.cs @@ -1,4 +1,5 @@ -using AccessQueueService.Data; +using System.Threading.Tasks; +using AccessQueueService.Data; using AccessQueueService.Models; namespace AccessQueueService.Services @@ -106,6 +107,17 @@ namespace AccessQueueService.Services } } - public int DeleteExpiredTickets() => _accessQueueRepo.DeleteExpiredTickets(); + public async Task DeleteExpiredTickets() + { + await _queueLock.WaitAsync(); + try + { + return _accessQueueRepo.DeleteExpiredTickets(); + } + finally + { + _queueLock.Release(); + } + } } } diff --git a/AccessQueueService/Services/IAccessService.cs b/AccessQueueService/Services/IAccessService.cs index a0274c9..6b94042 100644 --- a/AccessQueueService/Services/IAccessService.cs +++ b/AccessQueueService/Services/IAccessService.cs @@ -6,6 +6,6 @@ namespace AccessQueueService.Services { public Task RequestAccess(string userId); public Task RevokeAccess(string userId); - public int DeleteExpiredTickets(); + public Task DeleteExpiredTickets(); } }