AnonymousDisposable<TState>
Represents a Action-based disposable that can hold onto some state.
using System.Runtime.CompilerServices;
using System.Threading;
namespace System.Reactive.Disposables
{
internal sealed class AnonymousDisposable<[System.Runtime.CompilerServices.Nullable(2)] TState> : ICancelable, IDisposable
{
[System.Runtime.CompilerServices.Nullable(1)]
private TState _state;
[System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
private volatile Action<TState> _dispose;
public bool IsDisposed => _dispose == null;
[System.Runtime.CompilerServices.NullableContext(1)]
public AnonymousDisposable(TState state, Action<TState> dispose)
{
_state = state;
_dispose = dispose;
}
public void Dispose()
{
Interlocked.Exchange<Action<TState>>(ref _dispose, (Action<TState>)null)?.Invoke(_state);
_state = default(TState);
}
}
}