Browse Source

Replace AsyncLock with SemaphoreSlim

pull/1406/head
Halil İbrahim Kalkan 7 years ago
parent
commit
fb189814f7
  1. 2
      framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs
  2. 9
      framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs
  3. 5
      framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs
  4. 12
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs
  5. 4
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs

2
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(

9
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)

5
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<Task> action)
{
@ -20,7 +21,7 @@ namespace Volo.Abp.Threading
return;
}
using (await _asyncLock.LockAsync())
using (await _semaphore.LockAsync())
{
if (_runBefore)
{

12
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<string, ApplicationApiDescriptionModel> _cache;
private readonly SemaphoreSlim _semaphoreSlim;
private readonly SemaphoreSlim _semaphore;
public ApiDescriptionCache()
public ApiDescriptionCache(ICancellationTokenProvider cancellationTokenProvider)
{
CancellationTokenProvider = cancellationTokenProvider;
_cache = new Dictionary<string, ApplicationApiDescriptionModel>();
_semaphoreSlim = new SemaphoreSlim(1, 1);
_semaphore = new SemaphoreSlim(1, 1);
}
public async Task<ApplicationApiDescriptionModel> GetAsync(
string baseUrl,
Func<Task<ApplicationApiDescriptionModel>> factory)
{
using (await _semaphoreSlim.LockAsync())
using (await _semaphore.LockAsync(CancellationTokenProvider.Token))
{
var model = _cache.GetOrDefault(baseUrl);
if (model == null)

4
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<VirtualFileSystemOptions> options, IDynamicFileProvider dynamicFileProvider)
public VirtualFileProvider(
IOptions<VirtualFileSystemOptions> options,
IDynamicFileProvider dynamicFileProvider)
{
_options = options.Value;
_hybridFileProvider = CreateHybridProvider(dynamicFileProvider);

Loading…
Cancel
Save