internal Task LoadIntoBufferAsync(long maxBufferSize, CancellationToken cancellationToken) { this.CheckDisposed(); if (maxBufferSize > (long)int.MaxValue) { throw new ArgumentOutOfRangeException(nameof(maxBufferSize), (object)maxBufferSize, SR.Format((IFormatProvider)CultureInfo.InvariantCulture, SR.net_http_content_buffersize_limit, (object)int.MaxValue)); } if (this.IsBuffered) { return(Task.CompletedTask); } Exception error = (Exception)null; MemoryStream memoryStream = this.CreateMemoryStream(maxBufferSize, out error); if (memoryStream == null) { return(Task.FromException(error)); } try { Task streamAsync = this.SerializeToStreamAsync((Stream)memoryStream, (TransportContext)null, cancellationToken); this.CheckTaskNotNull(streamAsync); return(this.LoadIntoBufferAsyncCore(streamAsync, memoryStream)); } catch (Exception ex) when(HttpContent.StreamCopyExceptionNeedsWrapping(ex)) { return(Task.FromException(HttpContent.GetStreamCopyException(ex))); } }
private async Task LoadIntoBufferAsyncCore( Task serializeToStreamTask, MemoryStream tempBuffer) { HttpContent httpContent = this; try { await serializeToStreamTask.ConfigureAwait(false); } catch (Exception ex) { tempBuffer.Dispose(); Exception streamCopyException = HttpContent.GetStreamCopyException(ex); if (streamCopyException != ex) { throw streamCopyException; } throw; } try { tempBuffer.Seek(0L, SeekOrigin.Begin); httpContent._bufferedContent = tempBuffer; } catch (Exception ex) { if (NetEventSource.IsEnabled) { NetEventSource.Error((object)httpContent, (object)ex, nameof(LoadIntoBufferAsyncCore)); } throw; } }
internal Task CopyToAsync( Stream stream, TransportContext context, CancellationToken cancellationToken) { this.CheckDisposed(); if (stream == null) { throw new ArgumentNullException(nameof(stream)); } try { ArraySegment <byte> buffer; if (this.TryGetBuffer(out buffer)) { return(HttpContent.CopyToAsyncCore(stream.WriteAsync(new ReadOnlyMemory <byte>(buffer.Array, buffer.Offset, buffer.Count), cancellationToken))); } Task streamAsync = this.SerializeToStreamAsync(stream, context, cancellationToken); this.CheckTaskNotNull(streamAsync); return(HttpContent.CopyToAsyncCore(new ValueTask(streamAsync))); } catch (Exception ex) when(HttpContent.StreamCopyExceptionNeedsWrapping(ex)) { return(Task.FromException(HttpContent.GetStreamCopyException(ex))); } }