public virtual System.Threading.Tasks.Task CopyToAsync(System.IO.Pipelines.PipeWriter destination, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual System.Threading.Tasks.Task CopyToAsync(System.IO.Stream destination, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public static System.IO.Pipelines.PipeReader Create(System.IO.Stream stream, System.IO.Pipelines.StreamPipeReaderOptions readerOptions = null) { throw null; }
- public abstract void OnWriterCompleted(System.Action<System.Exception, object> callback, object state);
+ [System.Obsolete("OnWriterCompleted may not be invoked on all implementations of PipeReader. This will be removed in a future release.")]
+ public virtual void OnWriterCompleted(System.Action<System.Exception, object> callback, object state) { }
public abstract System.Threading.Tasks.ValueTask<System.IO.Pipelines.ReadResult> ReadAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
public abstract bool TryRead(out System.IO.Pipelines.ReadResult result);
}
public abstract System.Threading.Tasks.ValueTask<System.IO.Pipelines.FlushResult> FlushAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
public abstract System.Memory<byte> GetMemory(int sizeHint = 0);
public abstract System.Span<byte> GetSpan(int sizeHint = 0);
- public abstract void OnReaderCompleted(System.Action<System.Exception, object> callback, object state);
+ [System.Obsolete("OnReaderCompleted may not be invoked on all implementations of PipeWriter. This will be removed in a future release.")]
+ public virtual void OnReaderCompleted(System.Action<System.Exception, object> callback, object state) { }
public virtual System.Threading.Tasks.ValueTask<System.IO.Pipelines.FlushResult> WriteAsync(System.ReadOnlyMemory<byte> source, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
}
public readonly partial struct ReadResult
public override void Complete(Exception exception = null) => _pipe.CompleteReader(exception);
+#pragma warning disable CS0672 // Member overrides obsolete member
public override void OnWriterCompleted(Action<Exception, object> callback, object state) => _pipe.OnWriterCompleted(callback, state);
+#pragma warning restore CS0672 // Member overrides obsolete member
public ValueTaskSourceStatus GetStatus(short token) => _pipe.GetReadAsyncStatus();
public override void CancelPendingFlush() => _pipe.CancelPendingFlush();
+#pragma warning disable CS0672 // Member overrides obsolete member
public override void OnReaderCompleted(Action<Exception, object> callback, object state) => _pipe.OnReaderCompleted(callback, state);
+#pragma warning restore CS0672 // Member overrides obsolete member
public override ValueTask<FlushResult> FlushAsync(CancellationToken cancellationToken = default) => _pipe.FlushAsync(cancellationToken);
/// <summary>
/// Registers a callback that gets executed when the <see cref="PipeWriter"/> side of the pipe is completed
/// </summary>
- public abstract void OnWriterCompleted(Action<Exception, object> callback, object state);
+ [Obsolete("OnWriterCompleted may not be invoked on all implementations of PipeReader. This will be removed in a future release.")]
+ public virtual void OnWriterCompleted(Action<Exception, object> callback, object state)
+ {
+
+ }
/// <summary>
/// <summary>
/// Registers a callback that gets executed when the <see cref="PipeReader"/> side of the pipe is completed
/// </summary>
- public abstract void OnReaderCompleted(Action<Exception, object> callback, object state);
+ [Obsolete("OnReaderCompleted may not be invoked on all implementations of PipeWriter. This will be removed in a future release.")]
+ public virtual void OnReaderCompleted(Action<Exception, object> callback, object state)
+ {
+
+ }
/// <summary>
/// Makes bytes written available to <see cref="PipeReader"/> and runs <see cref="PipeReader.ReadAsync"/> continuation.
}
/// <inheritdoc />
- public override void OnWriterCompleted(Action<Exception, object> callback, object state)
- {
- }
-
- /// <inheritdoc />
public override async ValueTask<ReadResult> ReadAsync(CancellationToken cancellationToken = default)
{
// TODO ReadyAsync needs to throw if there are overlapping reads.
}
/// <inheritdoc />
- public override void OnReaderCompleted(Action<Exception, object> callback, object state)
- {
- }
-
- /// <inheritdoc />
public override ValueTask<FlushResult> FlushAsync(CancellationToken cancellationToken = default)
{
if (_bytesBuffered == 0)
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+#pragma warning disable CS0618 // Type or member is obsolete
+
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using Xunit;
Assert.Equal(1, pool.CurrentlyRentedBlocks);
+#pragma warning disable CS0618 // Type or member is obsolete
pipe.Reader.OnWriterCompleted((exception, o) => Assert.Equal(0, pool.CurrentlyRentedBlocks), null);
+#pragma warning restore CS0618 // Type or member is obsolete
pipe.Reader.Complete();
pipe.Writer.Complete();
Assert.Equal(1, pool.CurrentlyRentedBlocks);
+#pragma warning disable CS0618 // Type or member is obsolete
pipe.Writer.OnReaderCompleted((exception, o) => Assert.Equal(0, pool.CurrentlyRentedBlocks), null);
+#pragma warning restore CS0618 // Type or member is obsolete
pipe.Writer.Complete();
pipe.Reader.Complete();
}
var readerCompletedTask = new TaskCompletionSource<bool>();
+#pragma warning disable CS0618 // Type or member is obsolete
pipe.Writer.OnReaderCompleted(delegate { readerCompletedTask.SetResult(true); }, null);
+#pragma warning restore CS0618 // Type or member is obsolete
// Call Dispose{Async} multiple times; all should succeed.
for (int i = 0; i < 2; i++)
throw new NotImplementedException();
}
- public override void OnWriterCompleted(Action<Exception, object> callback, object state)
- {
- throw new NotImplementedException();
- }
-
public override ValueTask<ReadResult> ReadAsync(CancellationToken cancellationToken = default)
{
// Returns a ReadResult with no buffer and with IsCompleted and IsCancelled false
public override void AdvanceTo(SequencePosition consumed, SequencePosition examined) => throw new NotImplementedException();
public override void CancelPendingRead() => throw new NotImplementedException();
public override void Complete(Exception exception = null) => throw new NotImplementedException();
- public override void OnWriterCompleted(Action<Exception, object> callback, object state) => throw new NotImplementedException();
public override ValueTask<ReadResult> ReadAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException();
public override bool TryRead(out ReadResult result) => throw new NotImplementedException();
}
throw new NotImplementedException();
}
- public override void OnWriterCompleted(Action<Exception, object> callback, object state)
- {
- throw new NotImplementedException();
- }
-
public override ValueTask<ReadResult> ReadAsync(CancellationToken cancellationToken = default)
{
ReadCalled = true;
Stream s = pipe.Writer.AsStream();
var writerCompletedTask = new TaskCompletionSource<bool>();
+#pragma warning disable CS0618 // Type or member is obsolete
pipe.Reader.OnWriterCompleted(delegate { writerCompletedTask.SetResult(true); }, null);
+#pragma warning restore CS0618 // Type or member is obsolete
// Call Dispose{Async} multiple times; all should succeed.
for (int i = 0; i < 2; i++)
throw new NotImplementedException();
}
- public override void OnReaderCompleted(Action<Exception, object> callback, object state)
- {
- throw new NotImplementedException();
- }
-
public override ValueTask<FlushResult> WriteAsync(ReadOnlyMemory<byte> source, CancellationToken cancellationToken = default)
{
WriteAsyncCalled = true;
public override ValueTask<FlushResult> FlushAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException();
public override Memory<byte> GetMemory(int sizeHint = 0) => throw new NotImplementedException();
public override Span<byte> GetSpan(int sizeHint = 0) => throw new NotImplementedException();
- public override void OnReaderCompleted(Action<Exception, object> callback, object state) => throw new NotImplementedException();
}
public static IEnumerable<object[]> WriteCalls
Task reading = ExecuteOnNonThreadPoolThread(DoRead);
PipeWriter buffer = pipe.Writer;
+#pragma warning disable CS0618 // Type or member is obsolete
pipe.Writer.OnReaderCompleted((state, exception) =>
{
callbackRan = true;
Assert.True(Thread.CurrentThread.IsThreadPoolThread);
},
null);
+#pragma warning restore CS0618 // Type or member is obsolete
buffer.Write(Encoding.UTF8.GetBytes("Hello World"));
await buffer.FlushAsync();
{
bool fired = false;
PipeReader reader = PipeReader.Create(Stream.Null);
+#pragma warning disable CS0618 // Type or member is obsolete
reader.OnWriterCompleted((_, __) => { fired = true; }, null);
+#pragma warning restore CS0618 // Type or member is obsolete
reader.Complete();
Assert.False(fired);
}
{
bool fired = false;
PipeWriter writer = PipeWriter.Create(Stream.Null);
+#pragma warning disable CS0618 // Type or member is obsolete
writer.OnReaderCompleted((_, __) => { fired = true; }, null);
+#pragma warning restore CS0618 // Type or member is obsolete
writer.Complete();
Assert.False(fired);
}