<PackageReference Include="System.Reactive" Version="4.2.0-preview.102" />

ScheduledItem<TAbsolute>

public abstract class ScheduledItem<TAbsolute> : IScheduledItem<TAbsolute>, IComparable<ScheduledItem<TAbsolute>>, IDisposable where TAbsolute : IComparable<TAbsolute>
Abstract base class for scheduled work items.
using System.Collections.Generic; using System.Reactive.Disposables; namespace System.Reactive.Concurrency { public abstract class ScheduledItem<TAbsolute> : IScheduledItem<TAbsolute>, IComparable<ScheduledItem<TAbsolute>>, IDisposable where TAbsolute : IComparable<TAbsolute> { private IDisposable _disposable; private readonly IComparer<TAbsolute> _comparer; public TAbsolute DueTime { get; } public bool IsCanceled => Disposable.GetIsDisposed(ref _disposable); protected ScheduledItem(TAbsolute dueTime, IComparer<TAbsolute> comparer) { DueTime = dueTime; if (comparer == null) throw new ArgumentNullException("comparer"); _comparer = comparer; } public void Invoke() { if (!Disposable.GetIsDisposed(ref _disposable)) Disposable.SetSingle(ref _disposable, InvokeCore()); } protected abstract IDisposable InvokeCore(); public int CompareTo(ScheduledItem<TAbsolute> other) { if ((object)other == null) return 1; return _comparer.Compare(DueTime, other.DueTime); } public static bool operator <(ScheduledItem<TAbsolute> left, ScheduledItem<TAbsolute> right) { return Comparer<ScheduledItem<TAbsolute>>.Default.Compare(left, right) < 0; } public static bool operator <=(ScheduledItem<TAbsolute> left, ScheduledItem<TAbsolute> right) { return Comparer<ScheduledItem<TAbsolute>>.Default.Compare(left, right) <= 0; } public static bool operator >(ScheduledItem<TAbsolute> left, ScheduledItem<TAbsolute> right) { return Comparer<ScheduledItem<TAbsolute>>.Default.Compare(left, right) > 0; } public static bool operator >=(ScheduledItem<TAbsolute> left, ScheduledItem<TAbsolute> right) { return Comparer<ScheduledItem<TAbsolute>>.Default.Compare(left, right) >= 0; } public static bool operator ==(ScheduledItem<TAbsolute> left, ScheduledItem<TAbsolute> right) { return (object)left == right; } public static bool operator !=(ScheduledItem<TAbsolute> left, ScheduledItem<TAbsolute> right) { return !(left == right); } public override bool Equals(object obj) { return this == obj; } public override int GetHashCode() { return base.GetHashCode(); } public void Cancel() { Disposable.TryDispose(ref _disposable); } void IDisposable.Dispose() { Cancel(); } } }