public async Task StartReadAsyncTest2Async()
        {
            var data   = Enumerable.Range(0, 200).Select(v => (byte)v).ToArray();
            var buffer = new byte[100];
            var Time   = TimeSpan.FromMilliseconds(100);

            using var stream = new PipelineStream();
            await stream.WriteAsync(data, 0, data.Length);

            int ReadBytes = 0;

            using (var TokenSource = new CancellationTokenSource(Time))
                ReadBytes = await stream.ReadAsync(buffer, 0, buffer.Length, TokenSource.Token);
            Assert.AreEqual(buffer.Length, ReadBytes);
            ReadBytes = await stream.ReadAsync(buffer, 0, buffer.Length);

            Assert.AreEqual(buffer.Length, ReadBytes);
            using (var TokenSource = new CancellationTokenSource(Time))
                await Assert.ThrowsExceptionAsync <OperationCanceledException>(
                    () => stream.ReadAsync(buffer, 0, buffer.Length, TokenSource.Token));
            await stream.WriteAsync(data, 0, data.Length);

            Assert.AreEqual(buffer.Length, ReadBytes);
            ReadBytes = await stream.ReadAsync(buffer, 0, buffer.Length);

            Assert.AreEqual(buffer.Length, ReadBytes);
        }
        public async Task CompleteAsyncTestAsync()
        {
            using var Stream = new PipelineStream();
            Assert.AreEqual(0, Stream.Length);
            Assert.IsTrue(Stream.CanRead);
            Assert.IsTrue(Stream.CanWrite);
            var WriteMessage1 = "HELLO";
            await Stream.WriteAsync(Encoding.GetBytes(WriteMessage1));

            await Stream.CompleteAsync();

            await Stream.FlushAsync();

            var ReadCount = Encoding.GetByteCount(WriteMessage1);

            Assert.AreEqual(ReadCount, Stream.Length);
            var ReadBytes = new byte[ReadCount];

            ReadCount = await Stream.ReadAsync(ReadBytes);

            var ReadMessage1 = Encoding.GetString(ReadBytes.AsSpan().Slice(0, ReadCount));

            Assert.AreEqual(WriteMessage1, ReadMessage1);
            Assert.IsTrue(Stream.CanRead);
            Assert.IsFalse(Stream.CanWrite);
            var WriteMessage2 = "HI!";
            await Assert.ThrowsExceptionAsync <InvalidOperationException>(async() => await Stream.WriteAsync(Encoding.GetBytes(WriteMessage2)));
        }
        public async Task WriteAsyncAndCompleteAddingTestAsync()
        {
            var Time   = TimeSpan.FromMilliseconds(100);
            var data   = Enumerable.Range(0, 200).Select(v => (byte)v).ToArray();
            var buffer = new byte[100];

            using var stream = new PipelineStream();
            Assert.AreEqual(true, stream.CanWrite);
            using (var TokenSource = new CancellationTokenSource(Time))
                await stream.WriteAsync(data, TokenSource.Token);
            await stream.CompleteAsync();

            Assert.AreEqual(false, stream.CanWrite);
            using (var TokenSource = new CancellationTokenSource(Time))
                await Assert.ThrowsExceptionAsync <InvalidOperationException>(
                    async() => await stream.WriteAsync(data, TokenSource.Token));
        }
        public async Task WriteAsyncTestAsync()
        {
            var Time   = TimeSpan.FromMilliseconds(100);
            var data   = Enumerable.Range(0, 200).Select(v => (byte)v).ToArray();
            var buffer = new byte[100];

            using var stream      = new PipelineStream();
            using var TokenSource = new CancellationTokenSource(Time);
            await stream.WriteAsync(data, TokenSource.Token);
        }