<PackageReference Include="System.Reactive" Version="6.0.0" />

UserWorkItem<TState>

sealed class UserWorkItem<TState> : IDisposable
using System.Reactive.Disposables; using System.Runtime.CompilerServices; namespace System.Reactive.Concurrency { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] internal sealed class UserWorkItem<[System.Runtime.CompilerServices.Nullable(2)] TState> : IDisposable { private SingleAssignmentDisposableValue _cancelRunDisposable; private SingleAssignmentDisposableValue _cancelQueueDisposable; private readonly TState _state; private readonly IScheduler _scheduler; private readonly Func<IScheduler, TState, IDisposable> _action; public IDisposable CancelQueueDisposable { set { _cancelQueueDisposable.Disposable = value; } } public UserWorkItem(IScheduler scheduler, TState state, Func<IScheduler, TState, IDisposable> action) { _state = state; _action = action; _scheduler = scheduler; } public void Run() { if (!_cancelRunDisposable.IsDisposed) _cancelRunDisposable.Disposable = _action(_scheduler, _state); } public void Dispose() { _cancelQueueDisposable.Dispose(); _cancelRunDisposable.Dispose(); } } }