36 lines
815 B
C#
Raw Normal View History

using System;
using System.Threading;
2024-08-31 18:56:48 +02:00
namespace ConfusedPolarBear.Plugin.IntroSkipper.ScheduledTasks;
internal sealed class ScheduledTaskSemaphore : IDisposable
{
private static readonly SemaphoreSlim _semaphore = new(1, 1);
private static bool _isHeld;
2024-05-10 06:35:52 +02:00
private ScheduledTaskSemaphore()
{
}
public static int CurrentCount => _semaphore.CurrentCount;
2024-05-10 06:35:52 +02:00
public static IDisposable Acquire(int timeout, CancellationToken cancellationToken)
{
2024-05-10 06:35:52 +02:00
_isHeld = _semaphore.Wait(timeout, cancellationToken);
return new ScheduledTaskSemaphore();
}
/// <summary>
/// Dispose.
/// </summary>
public void Dispose()
{
2024-05-10 06:35:52 +02:00
if (_isHeld) // Release only if acquired
{
2024-05-10 06:35:52 +02:00
_semaphore.Release();
_isHeld = false;
}
}
}