mirror of
https://github.com/AlexMacocian/SystemExtensions.git
synced 2026-07-16 22:39:29 +00:00
25 lines
634 B
C#
25 lines
634 B
C#
using System.Extensions;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace System.Threading;
|
|
public readonly struct SemaphoreSlimContext : IDisposable
|
|
{
|
|
private readonly SemaphoreSlim semaphore;
|
|
|
|
private SemaphoreSlimContext(SemaphoreSlim semaphoreSlim)
|
|
{
|
|
this.semaphore = semaphoreSlim.ThrowIfNull(nameof(semaphoreSlim));
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
this.semaphore.Release();
|
|
}
|
|
|
|
public static async Task<SemaphoreSlimContext> Create(SemaphoreSlim semaphore)
|
|
{
|
|
await semaphore.ThrowIfNull(nameof(semaphore)).WaitAsync();
|
|
return new SemaphoreSlimContext(semaphore);
|
|
}
|
|
}
|