Inertia – Rev 1
?pathlinks?
using System;
using System.Threading;
using System.Threading.Tasks;
namespace Inertia
{
public class ScheduledContinuation : IDisposable
{
#region Private Delegates, Events, Enums, Properties, Indexers and Fields
private CancellationTokenSource _cancellationTokenSource;
private Task _task;
#endregion
#region Constructors, Destructors and Finalizers
public void Dispose()
{
if (_cancellationTokenSource != null)
{
_cancellationTokenSource?.Cancel();
_cancellationTokenSource?.Dispose();
_cancellationTokenSource = null;
}
}
#endregion
#region Public Methods
public void Schedule(TimeSpan delay, Action execute)
{
if (_cancellationTokenSource != null)
{
_cancellationTokenSource.Cancel();
_cancellationTokenSource.Dispose();
_cancellationTokenSource = null;
}
_cancellationTokenSource = new CancellationTokenSource();
_task = Task.Delay(delay, _cancellationTokenSource.Token)
.ContinueWith(task =>
{
try
{
execute.Invoke();
}
catch (Exception ex) when (ex is ObjectDisposedException || ex is OperationCanceledException)
{
}
}, _cancellationTokenSource.Token);
}
#endregion
}
}
Generated by GNU Enscript 1.6.5.90.