コード例 #1
0
        public async Task ReadCanBeCanceledViaCancelPendingReadWhenReadIsAsync()
        {
            var        stream = new CancelledReadsStream();
            PipeReader reader = PipeReader.Create(stream);

            ValueTask <ReadResult> task = reader.ReadAsync();

            reader.CancelPendingRead();

            stream.WaitForReadTask.TrySetResult(null);

            ReadResult readResult = await task;

            Assert.True(readResult.IsCanceled);
            reader.Complete();
        }
コード例 #2
0
        public async Task ReadCanBeCanceledViaCancelPendingReadWhenReadAtLeastAsync(bool useZeroByteReads)
        {
            var        stream = new CancelledReadsStream();
            PipeReader reader = PipeReader.Create(stream, new StreamPipeReaderOptions(useZeroByteReads: useZeroByteReads));

            ValueTask <ReadResult> task = reader.ReadAtLeastAsync(1);

            reader.CancelPendingRead();

            stream.WaitForReadTask.TrySetResult(null);

            ReadResult readResult = await task;

            Assert.True(readResult.IsCanceled);
            reader.Complete();
        }
コード例 #3
0
        public async Task ReadCanBeCancelledViaProvidedCancellationToken()
        {
            var        stream = new CancelledReadsStream();
            PipeReader reader = PipeReader.Create(stream);
            var        cts    = new CancellationTokenSource();

            ValueTask <ReadResult> task = reader.ReadAsync(cts.Token);

            Assert.False(task.IsCompleted);

            cts.Cancel();

            stream.WaitForReadTask.TrySetResult(null);

            await Assert.ThrowsAsync <OperationCanceledException>(async() => await task);

            reader.Complete();
        }
コード例 #4
0
        public async Task CancelingStreamViaCancellationTokenThrows()
        {
            var  pipe   = new Pipe();
            var  stream = new CancelledReadsStream();
            var  cts    = new CancellationTokenSource();
            Task task   = stream.CopyToAsync(pipe.Writer, cts.Token);

            Assert.False(task.IsCompleted);

            cts.Cancel();

            stream.WaitForReadTask.TrySetResult(null);

            await Assert.ThrowsAsync <OperationCanceledException>(() => task);

            pipe.Writer.Complete();
            pipe.Reader.Complete();
        }