diff --git a/products/ASC.Files/Core/Utils/FileMarker.cs b/products/ASC.Files/Core/Utils/FileMarker.cs index 7f9cf42528..63949d7a44 100644 --- a/products/ASC.Files/Core/Utils/FileMarker.cs +++ b/products/ASC.Files/Core/Utils/FileMarker.cs @@ -80,7 +80,7 @@ public class FileMarker private readonly AuthContext _authContext; private readonly IServiceProvider _serviceProvider; private readonly FilesSettingsHelper _filesSettingsHelper; - + private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1); public FileMarker( TenantManager tenantManager, UserManager userManager, @@ -351,30 +351,41 @@ public class FileMarker var tagDao = _daoFactory.GetTagDao(); var newTags = new List(); var updateTags = new List(); - - foreach (var userID in userEntriesData.Keys) + + try { - if (await tagDao.GetNewTagsAsync(userID, obj.FileEntry).AnyAsync()) + await _semaphore.WaitAsync(); + + foreach (var userID in userEntriesData.Keys) { - continue; + if (await tagDao.GetNewTagsAsync(userID, obj.FileEntry).AnyAsync()) + { + continue; + } + + var entries = userEntriesData[userID].Distinct().ToList(); + + await GetNewTagsAsync(userID, entries.OfType>().ToList()); + await GetNewTagsAsync(userID, entries.OfType>().ToList()); + } + + if (updateTags.Count > 0) + { + await tagDao.UpdateNewTags(updateTags, obj.CurrentAccountId); + } + + if (newTags.Count > 0) + { + await tagDao.SaveTags(newTags, obj.CurrentAccountId); } - - var entries = userEntriesData[userID].Distinct().ToList(); - - await GetNewTagsAsync(userID, entries.OfType>().ToList()); - await GetNewTagsAsync(userID, entries.OfType>().ToList()); } - - - - if (updateTags.Count > 0) + catch { - await tagDao.UpdateNewTags(updateTags, obj.CurrentAccountId); + throw; } - - if (newTags.Count > 0) + finally { - await tagDao.SaveTags(newTags, obj.CurrentAccountId); + _semaphore.Release(); } await Task.WhenAll(ExecMarkAsNewRequest(updateTags.Concat(newTags), socketManager));