Korero – Rev 1
?pathlinks?
using System;
using System.Threading;
using System.Threading.Tasks;
namespace Korero.Communication
{
public class ScheduledContinuation : IDisposable
{
#region Private Delegates, Events, Enums, Properties, Indexers and Fields
private CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
private ManualResetEvent _ready = new ManualResetEvent(true);
private Task _task;
#endregion
#region Constructors, Destructors and Finalizers
public void Dispose()
{
_ready.Dispose();
_ready = null;
}
#endregion
#region Public Methods
public void Schedule(int delay, Action execute)
{
if (!_ready.WaitOne(0))
{
return;
}
_ready.Reset();
if (_task != null)
{
_cancellationTokenSource?.Cancel();
_task.Wait();
_cancellationTokenSource?.Dispose();
_cancellationTokenSource = null;
_cancellationTokenSource = new CancellationTokenSource();
}
_task = Task.Delay(delay, _cancellationTokenSource.Token)
.ContinueWith(task =>
{
try
{
execute.Invoke();
}
finally
{
_ready.Set();
}
}, _cancellationTokenSource.Token);
}
#endregion
}
}
Generated by GNU Enscript 1.6.5.90.