protected override async Task <Stream> CreateContentReadStreamAsync() { MultipartContent multipartContent = this; try { Stream[] streams = new Stream[2 + multipartContent._nestedContent.Count * 2]; StringBuilder scratch = new StringBuilder(); int streamIndex = 0; streams[streamIndex++] = MultipartContent.EncodeStringToNewStream("--" + multipartContent._boundary + "\r\n"); for (int contentIndex = 0; contentIndex < multipartContent._nestedContent.Count; ++contentIndex) { HttpContent content = multipartContent._nestedContent[contentIndex]; streams[streamIndex++] = MultipartContent.EncodeStringToNewStream(multipartContent.SerializeHeadersToString(scratch, contentIndex, content)); ConfiguredTaskAwaitable <Stream> configuredTaskAwaitable = content.ReadAsStreamAsync().ConfigureAwait(false); Stream stream = await configuredTaskAwaitable ?? (Stream) new MemoryStream(); if (!stream.CanSeek) { // ISSUE: reference to a compiler-generated method configuredTaskAwaitable = multipartContent.\u003C\u003En__0().ConfigureAwait(false); return(await configuredTaskAwaitable); } streams[streamIndex++] = stream; } streams[streamIndex] = MultipartContent.EncodeStringToNewStream("\r\n--" + multipartContent._boundary + "--\r\n"); return((Stream) new MultipartContent.ContentReadStream(streams)); } catch (Exception ex) { if (NetEventSource.IsEnabled) { NetEventSource.Error((object)multipartContent, (object)ex, nameof(CreateContentReadStreamAsync)); } throw; } }
private protected async Task SerializeToStreamAsyncCore( Stream stream, TransportContext context, CancellationToken cancellationToken) { MultipartContent multipartContent = this; try { ConfiguredValueTaskAwaitable valueTaskAwaitable = MultipartContent.EncodeStringToStreamAsync(stream, "--" + multipartContent._boundary + "\r\n", cancellationToken).ConfigureAwait(false); await valueTaskAwaitable; StringBuilder output = new StringBuilder(); for (int contentIndex = 0; contentIndex < multipartContent._nestedContent.Count; ++contentIndex) { HttpContent content = multipartContent._nestedContent[contentIndex]; valueTaskAwaitable = MultipartContent.EncodeStringToStreamAsync(stream, multipartContent.SerializeHeadersToString(output, contentIndex, content), cancellationToken).ConfigureAwait(false); await valueTaskAwaitable; await content.CopyToAsync(stream, context, cancellationToken).ConfigureAwait(false); content = (HttpContent)null; } valueTaskAwaitable = MultipartContent.EncodeStringToStreamAsync(stream, "\r\n--" + multipartContent._boundary + "--\r\n", cancellationToken).ConfigureAwait(false); await valueTaskAwaitable; output = (StringBuilder)null; } catch (Exception ex) { if (NetEventSource.IsEnabled) { NetEventSource.Error((object)multipartContent, (object)ex, nameof(SerializeToStreamAsyncCore)); } throw; } }