diff --git a/Rx.NET/Source/src/System.Reactive/Concurrency/LocalScheduler.TimerQueue.cs b/Rx.NET/Source/src/System.Reactive/Concurrency/LocalScheduler.TimerQueue.cs index 8ecce796fa..05a74516c2 100644 --- a/Rx.NET/Source/src/System.Reactive/Concurrency/LocalScheduler.TimerQueue.cs +++ b/Rx.NET/Source/src/System.Reactive/Concurrency/LocalScheduler.TimerQueue.cs @@ -422,7 +422,7 @@ private abstract class WorkItem : IComparable, IDisposable public readonly LocalScheduler Scheduler; public readonly DateTimeOffset DueTime; - private readonly SingleAssignmentDisposable _disposable; + private IDisposable _disposable; private int _hasRun; protected WorkItem(LocalScheduler scheduler, DateTimeOffset dueTime) @@ -430,7 +430,6 @@ protected WorkItem(LocalScheduler scheduler, DateTimeOffset dueTime) Scheduler = scheduler; DueTime = dueTime; - _disposable = new SingleAssignmentDisposable(); _hasRun = 0; } @@ -446,9 +445,9 @@ public void Invoke(IScheduler scheduler) { try { - if (!_disposable.IsDisposed) + if (!Disposable.GetIsDisposed(ref _disposable)) { - _disposable.Disposable = InvokeCore(scheduler); + Disposable.SetSingle(ref _disposable, InvokeCore(scheduler)); } } finally @@ -462,7 +461,7 @@ public void Invoke(IScheduler scheduler) public int CompareTo(WorkItem/*!*/ other) => Comparer.Default.Compare(DueTime, other.DueTime); - public void Dispose() => _disposable.Dispose(); + public void Dispose() => Disposable.TryDispose(ref _disposable); } ///