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(); }
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(); }
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(); }
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(); }