From fb189814f798474dee44a49a895930083a542310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 28 Jun 2019 20:36:45 +0300 Subject: [PATCH] Replace AsyncLock with SemaphoreSlim --- .../Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs | 2 +- .../Volo/Abp/Caching/DistributedCache.cs | 9 +++++---- .../Volo/Abp/Threading/AsyncOneTimeRunner.cs | 5 +++-- .../Client/DynamicProxying/ApiDescriptionCache.cs | 12 ++++++++---- .../Abp/VirtualFileSystem/VirtualFileProvider.cs | 4 +++- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs index e1f5da512c..8d7012bde1 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs @@ -31,7 +31,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ protected IBackgroundJobExecuter JobExecuter { get; } protected IServiceScopeFactory ServiceScopeFactory { get; } - protected AsyncLock SyncObj = new AsyncLock(); + protected SemaphoreSlim SyncObj = new SemaphoreSlim(1, 1); protected bool IsDiposed { get; private set; } public JobQueue( diff --git a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs index e4d2c70ba5..309125a0ff 100644 --- a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs +++ b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs @@ -7,7 +7,6 @@ using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Nito.AsyncEx; using Volo.Abp.MultiTenancy; -using Volo.Abp.Serialization; using Volo.Abp.Threading; namespace Volo.Abp.Caching @@ -34,7 +33,7 @@ namespace Volo.Abp.Caching protected ICurrentTenant CurrentTenant { get; } - protected AsyncLock AsyncLock { get; } = new AsyncLock(); + protected SemaphoreSlim SyncSemaphore { get; } protected DistributedCacheEntryOptions DefaultCacheOptions; @@ -58,6 +57,8 @@ namespace Volo.Abp.Caching Serializer = serializer; CurrentTenant = currentTenant; + SyncSemaphore = new SemaphoreSlim(1, 1); + SetDefaultOptions(); } @@ -161,7 +162,7 @@ namespace Volo.Abp.Caching return value; } - using (AsyncLock.Lock(CancellationTokenProvider.Token)) + using (SyncSemaphore.Lock()) { value = Get(key, hideErrors); if (value != null) @@ -200,7 +201,7 @@ namespace Volo.Abp.Caching return value; } - using (await AsyncLock.LockAsync(token)) + using (await SyncSemaphore.LockAsync(token)) { value = await GetAsync(key, hideErrors, token); if (value != null) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs index e7a896c5c1..7b440ebfe6 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Threading.Tasks; using Nito.AsyncEx; @@ -11,7 +12,7 @@ namespace Volo.Abp.Threading public class AsyncOneTimeRunner { private volatile bool _runBefore; - private readonly AsyncLock _asyncLock = new AsyncLock(); + private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1); public async Task RunAsync(Func action) { @@ -20,7 +21,7 @@ namespace Volo.Abp.Threading return; } - using (await _asyncLock.LockAsync()) + using (await _semaphore.LockAsync()) { if (_runBefore) { diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs index aadb0415ab..9d1ea2dbbe 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs @@ -5,25 +5,29 @@ using System.Threading.Tasks; using Nito.AsyncEx; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Modeling; +using Volo.Abp.Threading; namespace Volo.Abp.Http.Client.DynamicProxying { public class ApiDescriptionCache : IApiDescriptionCache, ISingletonDependency { + protected ICancellationTokenProvider CancellationTokenProvider { get; } + private readonly Dictionary _cache; - private readonly SemaphoreSlim _semaphoreSlim; + private readonly SemaphoreSlim _semaphore; - public ApiDescriptionCache() + public ApiDescriptionCache(ICancellationTokenProvider cancellationTokenProvider) { + CancellationTokenProvider = cancellationTokenProvider; _cache = new Dictionary(); - _semaphoreSlim = new SemaphoreSlim(1, 1); + _semaphore = new SemaphoreSlim(1, 1); } public async Task GetAsync( string baseUrl, Func> factory) { - using (await _semaphoreSlim.LockAsync()) + using (await _semaphore.LockAsync(CancellationTokenProvider.Token)) { var model = _cache.GetOrDefault(baseUrl); if (model == null) diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs index 896d4a5ebc..9bcf76e4be 100644 --- a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs +++ b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs @@ -13,7 +13,9 @@ namespace Volo.Abp.VirtualFileSystem private readonly IFileProvider _hybridFileProvider; private readonly VirtualFileSystemOptions _options; - public VirtualFileProvider(IOptions options, IDynamicFileProvider dynamicFileProvider) + public VirtualFileProvider( + IOptions options, + IDynamicFileProvider dynamicFileProvider) { _options = options.Value; _hybridFileProvider = CreateHybridProvider(dynamicFileProvider);