49 lines
992 B
C#
49 lines
992 B
C#
|
using System;
|
||
|
using System.Threading;
|
||
|
|
||
|
namespace ConfusedPolarBear.Plugin.IntroSkipper;
|
||
|
|
||
|
internal sealed class ScheduledTaskSemaphore : IDisposable
|
||
|
{
|
||
|
private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
|
||
|
|
||
|
private ScheduledTaskSemaphore()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public static int CurrentCount => _semaphore.CurrentCount;
|
||
|
|
||
|
public static bool Wait(int timeout, CancellationToken cancellationToken)
|
||
|
{
|
||
|
return _semaphore.Wait(timeout, cancellationToken);
|
||
|
}
|
||
|
|
||
|
public static int Release()
|
||
|
{
|
||
|
return _semaphore.Release();
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Dispose.
|
||
|
/// </summary>
|
||
|
public void Dispose()
|
||
|
{
|
||
|
Dispose(true);
|
||
|
GC.SuppressFinalize(this);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Protected dispose.
|
||
|
/// </summary>
|
||
|
/// <param name="disposing">Dispose.</param>
|
||
|
private void Dispose(bool disposing)
|
||
|
{
|
||
|
if (!disposing)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
_semaphore.Dispose();
|
||
|
}
|
||
|
}
|