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;
using System.Runtime.CompilerServices;
namespace System.Reactive.Concurrency
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public abstract class ScheduledItem<[System.Runtime.CompilerServices.Nullable(0)] TAbsolute> : IScheduledItem<TAbsolute>, IComparable<ScheduledItem<TAbsolute>>, IDisposable where TAbsolute : IComparable<TAbsolute>
{
private SingleAssignmentDisposableValue _disposable;
private readonly IComparer<TAbsolute> _comparer;
public TAbsolute DueTime { get; }
public bool IsCanceled => _disposable.IsDisposed;
protected ScheduledItem(TAbsolute dueTime, IComparer<TAbsolute> comparer)
{
DueTime = dueTime;
if (comparer == null)
throw new ArgumentNullException("comparer");
_comparer = comparer;
}
public void Invoke()
{
if (!_disposable.IsDisposed)
_disposable.Disposable = InvokeCore();
}
protected abstract IDisposable InvokeCore();
public int CompareTo([System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})] 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 ==([System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})] ScheduledItem<TAbsolute> left, [System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})] ScheduledItem<TAbsolute> right)
{
return (object)left == right;
}
public static bool operator !=([System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})] ScheduledItem<TAbsolute> left, [System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})] ScheduledItem<TAbsolute> right)
{
return !(left == right);
}
[System.Runtime.CompilerServices.NullableContext(2)]
public override bool Equals(object obj)
{
return this == obj;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public void Cancel()
{
_disposable.Dispose();
}
void IDisposable.Dispose()
{
Cancel();
}
}
}