StreamExtensions
using System.Buffers;
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace System.ClientModel.Internal
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
internal static class StreamExtensions
{
private const int DefaultCopyBufferSize = 81920;
[AsyncStateMachine(typeof(<WriteAsync>d__1))]
public static Task WriteAsync(this Stream stream, [System.Runtime.CompilerServices.Nullable(0)] ReadOnlyMemory<byte> buffer, CancellationToken cancellation = default(CancellationToken))
{
<WriteAsync>d__1 stateMachine = default(<WriteAsync>d__1);
stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
stateMachine.stream = stream;
stateMachine.buffer = buffer;
stateMachine.cancellation = cancellation;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<WriteAsync>d__2))]
public static Task WriteAsync(this Stream stream, [System.Runtime.CompilerServices.Nullable(0)] ReadOnlySequence<byte> buffer, CancellationToken cancellation = default(CancellationToken))
{
<WriteAsync>d__2 stateMachine = default(<WriteAsync>d__2);
stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
stateMachine.stream = stream;
stateMachine.buffer = buffer;
stateMachine.cancellation = cancellation;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<CopyToAsync>d__3))]
public static Task CopyToAsync(this Stream source, Stream destination, CancellationToken cancellationToken)
{
<CopyToAsync>d__3 stateMachine = default(<CopyToAsync>d__3);
stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
stateMachine.source = source;
stateMachine.destination = destination;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
public static void CopyTo(this Stream source, Stream destination, CancellationToken cancellationToken)
{
byte[] array = ArrayPool<byte>.Shared.Rent(81920);
try {
cancellationToken.ThrowIfCancellationRequested();
int count;
while ((count = source.Read(array, 0, array.Length)) != 0) {
cancellationToken.ThrowIfCancellationRequested();
destination.Write(array, 0, count);
}
} finally {
destination.Flush();
ArrayPool<byte>.Shared.Return(array, false);
}
}
}
}