From 4626833e51da941a5fccb04f4d5127389272c452 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Mon, 25 Apr 2016 09:52:33 +0100 Subject: [PATCH 1/2] StreamSocketOutput WriteAsync as async --- .../Filter/StreamSocketOutput.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Filter/StreamSocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Filter/StreamSocketOutput.cs index f9ba1e42e..f45daec8b 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Filter/StreamSocketOutput.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Filter/StreamSocketOutput.cs @@ -73,9 +73,26 @@ public void Write(ArraySegment buffer, bool chunk) public Task WriteAsync(ArraySegment buffer, bool chunk, CancellationToken cancellationToken) { - // TODO: Use _outputStream.WriteAsync +#if NET451 Write(buffer, chunk); return TaskUtilities.CompletedTask; +#else + if (chunk && buffer.Array != null) + { + return WriteAsyncChunked(buffer, cancellationToken); + } + + return _outputStream.WriteAsync(buffer.Array ?? _nullBuffer, buffer.Offset, buffer.Count, cancellationToken); +#endif + } + + private async Task WriteAsyncChunked(ArraySegment buffer, CancellationToken cancellationToken) + { + var beginChunkBytes = ChunkWriter.BeginChunkBytes(buffer.Count); + + await _outputStream.WriteAsync(beginChunkBytes.Array, beginChunkBytes.Offset, beginChunkBytes.Count, cancellationToken); + await _outputStream.WriteAsync(buffer.Array ?? _nullBuffer, buffer.Offset, buffer.Count, cancellationToken); + await _outputStream.WriteAsync(_endChunkBytes, 0, _endChunkBytes.Length, cancellationToken); } public MemoryPoolIterator ProducingStart() From 216aa9343e597791348541342c3bf25531e4cb00 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Mon, 25 Apr 2016 11:49:48 +0100 Subject: [PATCH 2/2] Remove redundent null coalesce --- .../Filter/StreamSocketOutput.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Filter/StreamSocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Filter/StreamSocketOutput.cs index f45daec8b..0fce7a476 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Filter/StreamSocketOutput.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Filter/StreamSocketOutput.cs @@ -91,7 +91,7 @@ private async Task WriteAsyncChunked(ArraySegment buffer, CancellationToke var beginChunkBytes = ChunkWriter.BeginChunkBytes(buffer.Count); await _outputStream.WriteAsync(beginChunkBytes.Array, beginChunkBytes.Offset, beginChunkBytes.Count, cancellationToken); - await _outputStream.WriteAsync(buffer.Array ?? _nullBuffer, buffer.Offset, buffer.Count, cancellationToken); + await _outputStream.WriteAsync(buffer.Array, buffer.Offset, buffer.Count, cancellationToken); await _outputStream.WriteAsync(_endChunkBytes, 0, _endChunkBytes.Length, cancellationToken); }