DotNext.Threading by Roman Sakno

<PackageReference Include="DotNext.Threading" Version="3.1.1" />

 PersistentChannel<TInput, TOutput>

public abstract class PersistentChannel<TInput, TOutput> : Channel<TInput, TOutput>, IChannelWriter<TInput>, IChannel, IChannelReader<TOutput>, IDisposable
public long RemainingCount { get; }

public double Throughput { get; }

protected abstract ValueTask<TOutput> DeserializeAsync(Stream input, CancellationToken token)

protected virtual void Dispose(bool disposing)

public void Dispose()

protected abstract ValueTask SerializeAsync(TInput input, Stream output, CancellationToken token)