Browse Source

Use cancellationtoken in distributed locking.

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
c6da9ba0a9
  1. 1
      framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj
  2. 4
      framework/src/Volo.Abp.DistributedLocking/Volo/Abp/DistributedLocking/AbpDistributedLockingModule.cs
  3. 16
      framework/src/Volo.Abp.DistributedLocking/Volo/Abp/DistributedLocking/MedallionAbpDistributedLock.cs
  4. 2
      framework/src/Volo.Abp.Threading/Volo/Abp/Threading/NullCancellationTokenProvider.cs

1
framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj

@ -16,6 +16,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.DistributedLocking.Abstractions\Volo.Abp.DistributedLocking.Abstractions.csproj" />
<ProjectReference Include="..\Volo.Abp.Threading\Volo.Abp.Threading.csproj" />
</ItemGroup>
<ItemGroup>

4
framework/src/Volo.Abp.DistributedLocking/Volo/Abp/DistributedLocking/AbpDistributedLockingModule.cs

@ -1,9 +1,11 @@
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
namespace Volo.Abp.DistributedLocking;
[DependsOn(
typeof(AbpDistributedLockingAbstractionsModule)
typeof(AbpDistributedLockingAbstractionsModule),
typeof(AbpThreadingModule)
)]
public class AbpDistributedLockingModule : AbpModule
{

16
framework/src/Volo.Abp.DistributedLocking/Volo/Abp/DistributedLocking/MedallionAbpDistributedLock.cs

@ -3,6 +3,7 @@ using System.Threading;
using System.Threading.Tasks;
using Medallion.Threading;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Threading;
namespace Volo.Abp.DistributedLocking;
@ -10,10 +11,14 @@ namespace Volo.Abp.DistributedLocking;
public class MedallionAbpDistributedLock : IAbpDistributedLock, ITransientDependency
{
protected IDistributedLockProvider DistributedLockProvider { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
public MedallionAbpDistributedLock(IDistributedLockProvider distributedLockProvider)
public MedallionAbpDistributedLock(
IDistributedLockProvider distributedLockProvider,
ICancellationTokenProvider cancellationTokenProvider)
{
DistributedLockProvider = distributedLockProvider;
CancellationTokenProvider = cancellationTokenProvider;
}
public async Task<IAbpDistributedLockHandle> TryAcquireAsync(
@ -23,7 +28,14 @@ public class MedallionAbpDistributedLock : IAbpDistributedLock, ITransientDepend
{
Check.NotNullOrWhiteSpace(name, nameof(name));
var handle = await DistributedLockProvider.TryAcquireLockAsync(name, timeout, cancellationToken);
CancellationTokenProvider.FallbackToProvider(cancellationToken);
var handle = await DistributedLockProvider.TryAcquireLockAsync(
name,
timeout,
CancellationTokenProvider.FallbackToProvider(cancellationToken)
);
if (handle == null)
{
return null;

2
framework/src/Volo.Abp.Threading/Volo/Abp/Threading/NullCancellationTokenProvider.cs

@ -4,7 +4,7 @@ namespace Volo.Abp.Threading;
public class NullCancellationTokenProvider : CancellationTokenProviderBase
{
public static NullCancellationTokenProvider Instance { get; } = new NullCancellationTokenProvider();
public static NullCancellationTokenProvider Instance { get; } = new();
public override CancellationToken Token => OverrideValue?.CancellationToken ?? CancellationToken.None;

Loading…
Cancel
Save