Browse Source

Introduce SemaphoreSlimExtensions.

pull/6198/head
maliming 6 years ago
parent
commit
112247406f
  1. 3
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs
  2. 5
      framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs
  3. 3
      framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs
  4. 3
      framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs
  5. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs
  6. 89
      framework/src/Volo.Abp.Core/Volo/Abp/Threading/SemaphoreSlimExtensions.cs
  7. 7
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs
  8. 2
      framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs

3
framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs

@ -7,7 +7,6 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.DependencyInjection;
using Nito.AsyncEx;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Localization;
using Volo.Abp.Settings;
@ -47,7 +46,7 @@ namespace Microsoft.AspNetCore.RequestLocalization
{
if (_requestLocalizationOptions == null)
{
using (await _syncSemaphore.LockAsync().ConfigureAwait(false))
using (await _syncSemaphore.LockAsync())
{
if (_requestLocalizationOptions == null)
{

5
framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs

@ -6,7 +6,6 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Nito.AsyncEx;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using Volo.Abp.ExceptionHandling;
@ -76,7 +75,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ
{
CheckDisposed();
using (await SyncObj.LockAsync().ConfigureAwait(false))
using (await SyncObj.LockAsync())
{
await EnsureInitializedAsync();
@ -95,7 +94,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ
return;
}
using (await SyncObj.LockAsync().ConfigureAwait(false))
using (await SyncObj.LockAsync(cancellationToken))
{
await EnsureInitializedAsync();
}

3
framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs

@ -4,7 +4,6 @@ using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Nito.AsyncEx;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Threading;
@ -64,7 +63,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ
return (IJobQueue<TArgs>)jobQueue;
}
using (await SyncSemaphore.LockAsync().ConfigureAwait(false))
using (await SyncSemaphore.LockAsync())
{
if (JobQueues.TryGetValue(jobConfiguration.JobName, out jobQueue))
{

3
framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs

@ -9,7 +9,6 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Nito.AsyncEx;
using Volo.Abp.ExceptionHandling;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Threading;
@ -499,7 +498,7 @@ namespace Volo.Abp.Caching
return value;
}
using (await SyncSemaphore.LockAsync(token).ConfigureAwait(false))
using (await SyncSemaphore.LockAsync(token))
{
value = await GetAsync(key, hideErrors, considerUow, token);
if (value != null)

2
framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs

@ -21,7 +21,7 @@ namespace Volo.Abp.Threading
return;
}
using (await _semaphore.LockAsync().ConfigureAwait(false))
using (await _semaphore.LockAsync())
{
if (_runBefore)
{

89
framework/src/Volo.Abp.Core/Volo/Abp/Threading/SemaphoreSlimExtensions.cs

@ -0,0 +1,89 @@
using System;
using System.Threading;
using System.Threading.Tasks;
namespace Volo.Abp.Threading
{
public static class SemaphoreSlimExtensions
{
public static async Task<IDisposable> LockAsync(this SemaphoreSlim semaphoreSlim)
{
await semaphoreSlim.WaitAsync();
return GetDispose(semaphoreSlim);
}
public static async Task<IDisposable> LockAsync(this SemaphoreSlim semaphoreSlim, CancellationToken cancellationToken)
{
await semaphoreSlim.WaitAsync(cancellationToken);
return GetDispose(semaphoreSlim);
}
public static async Task<IDisposable> LockAsync(this SemaphoreSlim semaphoreSlim, int millisecondsTimeout)
{
await semaphoreSlim.WaitAsync(millisecondsTimeout);
return GetDispose(semaphoreSlim);
}
public static async Task<IDisposable> LockAsync(this SemaphoreSlim semaphoreSlim, int millisecondsTimeout, CancellationToken cancellationToken)
{
await semaphoreSlim.WaitAsync(millisecondsTimeout, cancellationToken);
return GetDispose(semaphoreSlim);
}
public static async Task<IDisposable> LockAsync(this SemaphoreSlim semaphoreSlim, TimeSpan timeout)
{
await semaphoreSlim.WaitAsync(timeout);
return GetDispose(semaphoreSlim);
}
public static async Task<IDisposable> LockAsync(this SemaphoreSlim semaphoreSlim, TimeSpan timeout, CancellationToken cancellationToken)
{
await semaphoreSlim.WaitAsync(timeout, cancellationToken);
return GetDispose(semaphoreSlim);
}
public static IDisposable Lock(this SemaphoreSlim semaphoreSlim)
{
semaphoreSlim.Wait();
return GetDispose(semaphoreSlim);
}
public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, CancellationToken cancellationToken)
{
semaphoreSlim.Wait(cancellationToken);
return GetDispose(semaphoreSlim);
}
public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, int millisecondsTimeout)
{
semaphoreSlim.Wait(millisecondsTimeout);
return GetDispose(semaphoreSlim);
}
public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, int millisecondsTimeout, CancellationToken cancellationToken)
{
semaphoreSlim.Wait(millisecondsTimeout, cancellationToken);
return GetDispose(semaphoreSlim);
}
public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, TimeSpan timeout)
{
semaphoreSlim.Wait(timeout);
return GetDispose(semaphoreSlim);
}
public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, TimeSpan timeout, CancellationToken cancellationToken)
{
semaphoreSlim.Wait(timeout, cancellationToken);
return GetDispose(semaphoreSlim);
}
private static IDisposable GetDispose(this SemaphoreSlim semaphoreSlim)
{
return new DisposeAction(() =>
{
semaphoreSlim.Release();
});
}
}
}

7
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs

@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Nito.AsyncEx;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Modeling;
using Volo.Abp.Threading;
@ -24,10 +23,10 @@ namespace Volo.Abp.Http.Client.DynamicProxying
}
public async Task<ApplicationApiDescriptionModel> GetAsync(
string baseUrl,
string baseUrl,
Func<Task<ApplicationApiDescriptionModel>> factory)
{
using (await _semaphore.LockAsync(CancellationTokenProvider.Token).ConfigureAwait(false))
using (await _semaphore.LockAsync(CancellationTokenProvider.Token))
{
var model = _cache.GetOrDefault(baseUrl);
if (model == null)
@ -39,4 +38,4 @@ namespace Volo.Abp.Http.Client.DynamicProxying
}
}
}
}
}

2
framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs

@ -27,7 +27,7 @@ namespace Volo.Abp.TextTemplating.VirtualFiles
return reader;
}
using (await SyncObj.LockAsync().ConfigureAwait(false))
using (await SyncObj.LockAsync())
{
if (ReaderCache.TryGetValue(templateDefinition.Name, out reader))
{

Loading…
Cancel
Save