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.Builder;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Nito.AsyncEx;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.Settings; using Volo.Abp.Settings;
@ -47,7 +46,7 @@ namespace Microsoft.AspNetCore.RequestLocalization
{ {
if (_requestLocalizationOptions == null) if (_requestLocalizationOptions == null)
{ {
using (await _syncSemaphore.LockAsync().ConfigureAwait(false)) using (await _syncSemaphore.LockAsync())
{ {
if (_requestLocalizationOptions == null) 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;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Nito.AsyncEx;
using RabbitMQ.Client; using RabbitMQ.Client;
using RabbitMQ.Client.Events; using RabbitMQ.Client.Events;
using Volo.Abp.ExceptionHandling; using Volo.Abp.ExceptionHandling;
@ -76,7 +75,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ
{ {
CheckDisposed(); CheckDisposed();
using (await SyncObj.LockAsync().ConfigureAwait(false)) using (await SyncObj.LockAsync())
{ {
await EnsureInitializedAsync(); await EnsureInitializedAsync();
@ -95,7 +94,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ
return; return;
} }
using (await SyncObj.LockAsync().ConfigureAwait(false)) using (await SyncObj.LockAsync(cancellationToken))
{ {
await EnsureInitializedAsync(); 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 System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Nito.AsyncEx;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Threading; using Volo.Abp.Threading;
@ -64,7 +63,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ
return (IJobQueue<TArgs>)jobQueue; return (IJobQueue<TArgs>)jobQueue;
} }
using (await SyncSemaphore.LockAsync().ConfigureAwait(false)) using (await SyncSemaphore.LockAsync())
{ {
if (JobQueues.TryGetValue(jobConfiguration.JobName, out jobQueue)) 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;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Nito.AsyncEx;
using Volo.Abp.ExceptionHandling; using Volo.Abp.ExceptionHandling;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
using Volo.Abp.Threading; using Volo.Abp.Threading;
@ -499,7 +498,7 @@ namespace Volo.Abp.Caching
return value; return value;
} }
using (await SyncSemaphore.LockAsync(token).ConfigureAwait(false)) using (await SyncSemaphore.LockAsync(token))
{ {
value = await GetAsync(key, hideErrors, considerUow, token); value = await GetAsync(key, hideErrors, considerUow, token);
if (value != null) if (value != null)

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

@ -21,7 +21,7 @@ namespace Volo.Abp.Threading
return; return;
} }
using (await _semaphore.LockAsync().ConfigureAwait(false)) using (await _semaphore.LockAsync())
{ {
if (_runBefore) 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.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Nito.AsyncEx;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Modeling; using Volo.Abp.Http.Modeling;
using Volo.Abp.Threading; using Volo.Abp.Threading;
@ -24,10 +23,10 @@ namespace Volo.Abp.Http.Client.DynamicProxying
} }
public async Task<ApplicationApiDescriptionModel> GetAsync( public async Task<ApplicationApiDescriptionModel> GetAsync(
string baseUrl, string baseUrl,
Func<Task<ApplicationApiDescriptionModel>> factory) Func<Task<ApplicationApiDescriptionModel>> factory)
{ {
using (await _semaphore.LockAsync(CancellationTokenProvider.Token).ConfigureAwait(false)) using (await _semaphore.LockAsync(CancellationTokenProvider.Token))
{ {
var model = _cache.GetOrDefault(baseUrl); var model = _cache.GetOrDefault(baseUrl);
if (model == null) 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; return reader;
} }
using (await SyncObj.LockAsync().ConfigureAwait(false)) using (await SyncObj.LockAsync())
{ {
if (ReaderCache.TryGetValue(templateDefinition.Name, out reader)) if (ReaderCache.TryGetValue(templateDefinition.Name, out reader))
{ {

Loading…
Cancel
Save