public Task SerializeAsync(HttpRequestMessage request, Stream stream) { if (request.Content != null) { return request.Content.LoadIntoBufferAsync() .Then(() => { var httpMessageContent = new HttpMessageContent(request); // All in-memory and CPU-bound so no need to async httpMessageContent.ReadAsByteArrayAsync().Then( buffer => { return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent); }); }); } else { var httpMessageContent = new HttpMessageContent(request); // All in-memory and CPU-bound so no need to async return httpMessageContent.ReadAsByteArrayAsync().Then( buffer => { return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent); } ); } }
public Task SerializeAsync(Task<HttpResponseMessage> response, Stream stream) { return response.Then(r => { if (r.Content != null) { TraceWriter.WriteLine("SerializeAsync - before load", TraceLevel.Verbose); return r.Content.LoadIntoBufferAsync() .Then(() => { TraceWriter.WriteLine("SerializeAsync - after load", TraceLevel.Verbose); var httpMessageContent = new HttpMessageContent(r); // All in-memory and CPU-bound so no need to async return httpMessageContent.ReadAsByteArrayAsync(); }) .Then( buffer => { TraceWriter.WriteLine("SerializeAsync - after ReadAsByteArrayAsync", TraceLevel.Verbose); return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent); } ); ; } else { TraceWriter.WriteLine("Content NULL - before load", TraceLevel.Verbose); var httpMessageContent = new HttpMessageContent(r); // All in-memory and CPU-bound so no need to async var buffer = httpMessageContent.ReadAsByteArrayAsync().Result; return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent); } } ); }
public async Task SerializeAsync(Task<HttpResponseMessage> response, Stream stream) { var r = await response; if (r.Content != null) { await r.Content.LoadIntoBufferAsync(); var httpMessageContent = new HttpMessageContent(r); // All in-memory and CPU-bound so no need to async var buffer = await httpMessageContent.ReadAsByteArrayAsync(); await Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent); } else { var httpMessageContent = new HttpMessageContent(r); // All in-memory and CPU-bound so no need to async var buffer = await httpMessageContent.ReadAsByteArrayAsync(); await Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent); } }