diff --git a/Directory.Packages.props b/Directory.Packages.props index 5d84b758547..6991b372b70 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -166,6 +166,7 @@ + diff --git a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj index edb61d6a21c..b1605bddd29 100644 --- a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj +++ b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj @@ -33,6 +33,9 @@ + + + diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Threading/SemaphoreSlimExtensions.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/SemaphoreSlimExtensions.cs index 51066da8a58..57151c24a00 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Threading/SemaphoreSlimExtensions.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/SemaphoreSlimExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; @@ -6,19 +7,22 @@ namespace Volo.Abp.Threading; public static class SemaphoreSlimExtensions { - public async static Task LockAsync(this SemaphoreSlim semaphoreSlim) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public async static ValueTask LockAsync(this SemaphoreSlim semaphoreSlim) { await semaphoreSlim.WaitAsync(); return GetDispose(semaphoreSlim); } - public async static Task LockAsync(this SemaphoreSlim semaphoreSlim, CancellationToken cancellationToken) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public async static ValueTask LockAsync(this SemaphoreSlim semaphoreSlim, CancellationToken cancellationToken) { await semaphoreSlim.WaitAsync(cancellationToken); return GetDispose(semaphoreSlim); } - public async static Task LockAsync(this SemaphoreSlim semaphoreSlim, int millisecondsTimeout) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public async static ValueTask LockAsync(this SemaphoreSlim semaphoreSlim, int millisecondsTimeout) { if (await semaphoreSlim.WaitAsync(millisecondsTimeout)) { @@ -28,7 +32,8 @@ public async static Task LockAsync(this SemaphoreSlim semaphoreSlim throw new TimeoutException(); } - public async static Task LockAsync(this SemaphoreSlim semaphoreSlim, int millisecondsTimeout, CancellationToken cancellationToken) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public async static ValueTask LockAsync(this SemaphoreSlim semaphoreSlim, int millisecondsTimeout, CancellationToken cancellationToken) { if (await semaphoreSlim.WaitAsync(millisecondsTimeout, cancellationToken)) { @@ -38,7 +43,8 @@ public async static Task LockAsync(this SemaphoreSlim semaphoreSlim throw new TimeoutException(); } - public async static Task LockAsync(this SemaphoreSlim semaphoreSlim, TimeSpan timeout) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public async static ValueTask LockAsync(this SemaphoreSlim semaphoreSlim, TimeSpan timeout) { if (await semaphoreSlim.WaitAsync(timeout)) { @@ -48,7 +54,8 @@ public async static Task LockAsync(this SemaphoreSlim semaphoreSlim throw new TimeoutException(); } - public async static Task LockAsync(this SemaphoreSlim semaphoreSlim, TimeSpan timeout, CancellationToken cancellationToken) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public async static ValueTask LockAsync(this SemaphoreSlim semaphoreSlim, TimeSpan timeout, CancellationToken cancellationToken) { if (await semaphoreSlim.WaitAsync(timeout, cancellationToken)) { @@ -58,18 +65,21 @@ public async static Task LockAsync(this SemaphoreSlim semaphoreSlim throw new TimeoutException(); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IDisposable Lock(this SemaphoreSlim semaphoreSlim) { semaphoreSlim.Wait(); return GetDispose(semaphoreSlim); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, CancellationToken cancellationToken) { semaphoreSlim.Wait(cancellationToken); return GetDispose(semaphoreSlim); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, int millisecondsTimeout) { if (semaphoreSlim.Wait(millisecondsTimeout)) @@ -80,6 +90,7 @@ public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, int millisecond throw new TimeoutException(); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, int millisecondsTimeout, CancellationToken cancellationToken) { if (semaphoreSlim.Wait(millisecondsTimeout, cancellationToken)) @@ -90,6 +101,7 @@ public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, int millisecond throw new TimeoutException(); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, TimeSpan timeout) { if (semaphoreSlim.Wait(timeout)) @@ -100,6 +112,7 @@ public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, TimeSpan timeou throw new TimeoutException(); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, TimeSpan timeout, CancellationToken cancellationToken) { if (semaphoreSlim.Wait(timeout, cancellationToken)) @@ -110,6 +123,7 @@ public static IDisposable Lock(this SemaphoreSlim semaphoreSlim, TimeSpan timeou throw new TimeoutException(); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] private static IDisposable GetDispose(this SemaphoreSlim semaphoreSlim) { return new DisposeAction(static (semaphoreSlim) =>