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

BehaviorSubject<T>

public sealed class BehaviorSubject<T> : SubjectBase<T>
using System.Reactive.Linq; using System.Reactive.Linq; using System.Runtime.CompilerServices; namespace System.Reactive.Subjects { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] internal sealed class ConnectableObservable<[System.Runtime.CompilerServices.Nullable(2)] TSource, [System.Runtime.CompilerServices.Nullable(2)] TResult> : IConnectableObservable<TResult>, IObservable<TResult> { [System.Runtime.CompilerServices.NullableContext(0)] private sealed class Connection : IDisposable { [System.Runtime.CompilerServices.Nullable(1)] private readonly ConnectableObservable<TSource, TResult> _parent = parent; [System.Runtime.CompilerServices.Nullable(2)] private IDisposable _subscription = subscription; [System.Runtime.CompilerServices.NullableContext(1)] public Connection(ConnectableObservable<TSource, TResult> parent, IDisposable subscription) { } public void Dispose() { lock (_parent._gate) { if (_subscription != null) { _subscription.Dispose(); _subscription = null; _parent._connection = null; } } } } private readonly ISubject<TSource, TResult> _subject = subject; private readonly IObservable<TSource> _source = Observable.AsObservable<TSource>(source); private readonly object _gate = new object(); [System.Runtime.CompilerServices.Nullable(new byte[] { 2, 0, 0 })] private Connection _connection; public ConnectableObservable(IObservable<TSource> source, ISubject<TSource, TResult> subject) { } public IDisposable Connect() { lock (_gate) { if (_connection == null) { IDisposable subscription = ObservableExtensions.SubscribeSafe<TSource>(_source, (IObserver<TSource>)_subject); IDisposable subscription; _connection = new Connection(this, subscription); } return _connection; } } public IDisposable Subscribe(IObserver<TResult> observer) { if (observer == null) throw new ArgumentNullException("observer"); return ObservableExtensions.SubscribeSafe<TResult>((IObservable<TResult>)_subject, observer); } } }