Пример #1
0
        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)));
            }
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
 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)));
     }
 }