diff --git a/AsbCloudInfrastructure/Services/Cache/CacheTable.cs b/AsbCloudInfrastructure/Services/Cache/CacheTable.cs index db0aee2e..445fb8cc 100644 --- a/AsbCloudInfrastructure/Services/Cache/CacheTable.cs +++ b/AsbCloudInfrastructure/Services/Cache/CacheTable.cs @@ -13,6 +13,7 @@ namespace AsbCloudInfrastructure.Services.Cache private (DateTime refreshDate, IEnumerable entities) data; private readonly List cached; private readonly DbSet dbSet; + private readonly SemaphoreSlim semaphore = new SemaphoreSlim(1, 1); internal CacheTable(DbContext context, (DateTime refreshDate, IEnumerable entities) data) { @@ -27,7 +28,10 @@ namespace AsbCloudInfrastructure.Services.Cache public int Refresh() { if (cached.Any()) + { + semaphore.Wait(); cached.Clear(); + } var dbEntities = context.Set().AsNoTracking().ToList(); cached.AddRange(dbEntities); data.refreshDate = DateTime.Now; @@ -37,7 +41,10 @@ namespace AsbCloudInfrastructure.Services.Cache public async Task RefreshAsync(CancellationToken token = default) { if (cached.Any()) - cached.Clear(); + { + await semaphore.WaitAsync(token).ConfigureAwait(true); + cached.Clear(); + } var dbEntities = await context.Set().AsNoTracking().ToListAsync(token).ConfigureAwait(false); cached.AddRange(dbEntities); data.refreshDate = DateTime.Now;