using System.Reactive.Disposables;
using System;
using System.IO;
using System.Reactive.Concurrency;
using System.Threading;
using Reactive.Bindings.Extensions;
namespace DisFixerTest.ReactiveProperty
{
public class RxStuff : IDisposable
{
public BooleanDisposable BooleanDisposable { get; } = new BooleanDisposable();
public CancellationDisposable CancellationDisposable { get; } = new CancellationDisposable();
public CompositeDisposable CompositeDisposable { get; } = new CompositeDisposable();
public ContextDisposable ContextDisposable { get; } = new ContextDisposable(SynchronizationContext.Current, new MemoryStream());// no warning for MemoryStream because tracked by ContextDisposable
public MultipleAssignmentDisposable MultipleAssignmentDisposable { get; } = new MultipleAssignmentDisposable();
public RefCountDisposable RefCountDisposable { get; } = new RefCountDisposable(new MemoryStream());// no warning for MemoryStream because tracked by RefCountDisposable
public ScheduledDisposable ScheduledDisposable { get; } = new ScheduledDisposable(TaskPoolScheduler.Default, new MemoryStream());// no warning for MemoryStream because tracked by ScheduledDisposable
public SerialDisposable SerialDisposable { get; } = new SerialDisposable();
public SingleAssignmentDisposable SingleAssignmentDisposable { get; } = new SingleAssignmentDisposable();
public RxStuff()
{
CompositeDisposable.Add(new MemoryStream());
new MemoryStream().AddTo(CompositeDisposable);
MultipleAssignmentDisposable.Disposable = new MemoryStream();// no warning because tracked my MultipleAssignmentDisposable, why no warnig now (v2.1.3)?
SerialDisposable.Disposable = new MemoryStream();// no warning because tracked my SerialDisposable, why no warnig now (v2.1.3)?
SingleAssignmentDisposable.Disposable = new MemoryStream();// no warning because tracked my SingleAssignmentDisposable, why no warnig now (v2.1.3)?
}
public void Dispose()
{
BooleanDisposable?.Dispose();
CancellationDisposable?.Dispose();
CompositeDisposable?.Dispose();
ContextDisposable?.Dispose();
MultipleAssignmentDisposable?.Dispose();
RefCountDisposable?.Dispose();
ScheduledDisposable?.Dispose();
SerialDisposable?.Dispose();
SingleAssignmentDisposable?.Dispose();
}
}
}
Prerequisites
Description
The namespace
System.Reactive.Disposables
contains slots of spacial IDisposables, that needed to be handled differenly.https://docs.microsoft.com/en-us/previous-versions/dotnet/reactive-extensions/hh229090(v=vs.103)
Source Code
Screenshot