Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetByteArrayAsyncCore()

async Task< byte[]> System.Net.Http.HttpClient.GetByteArrayAsyncCore ( HttpRequestMessage request,
CancellationToken cancellationToken )
inlineprivate

Definition at line 254 of file HttpClient.cs.

255 {
256 bool telemetryStarted = StartSend(request);
257 bool responseContentTelemetryStarted = false;
259 CancellationTokenSource cts = tuple.Item1;
260 bool disposeCts = tuple.Item2;
261 CancellationTokenSource pendingRequestsCts = tuple.Item3;
262 HttpResponseMessage response = null;
263 try
264 {
265 response = await base.SendAsync(request, cts.Token).ConfigureAwait(continueOnCapturedContext: false);
266 ThrowForNullResponse(response);
267 response.EnsureSuccessStatusCode();
268 HttpContent content = response.Content;
269 if (HttpTelemetry.Log.IsEnabled() && telemetryStarted)
270 {
271 HttpTelemetry.Log.ResponseContentStart();
272 responseContentTelemetryStarted = true;
273 }
274 long? contentLength = content.Headers.ContentLength;
275 using Stream buffer = (contentLength.HasValue ? ((Stream)new HttpContent.LimitMemoryStream(_maxResponseContentBufferSize, (int)contentLength.GetValueOrDefault())) : ((Stream)new HttpContent.LimitArrayPoolWriteStream(_maxResponseContentBufferSize)));
276 Stream stream = content.TryReadAsStream();
277 Stream stream2 = stream;
278 if (stream2 == null)
279 {
280 stream2 = await content.ReadAsStreamAsync(cts.Token).ConfigureAwait(continueOnCapturedContext: false);
281 }
282 using Stream responseStream = stream2;
283 _ = 2;
284 try
285 {
286 await responseStream.CopyToAsync(buffer, cts.Token).ConfigureAwait(continueOnCapturedContext: false);
287 }
288 catch (Exception e) when (HttpContent.StreamCopyExceptionNeedsWrapping(e))
289 {
290 throw HttpContent.WrapStreamCopyException(e);
291 }
292 return (buffer.Length == 0L) ? Array.Empty<byte>() : ((buffer is HttpContent.LimitMemoryStream limitMemoryStream) ? limitMemoryStream.GetSizedBuffer() : ((HttpContent.LimitArrayPoolWriteStream)buffer).ToArray());
293 }
294 catch (Exception e2)
295 {
296 HandleFailure(e2, telemetryStarted, response, cts, cancellationToken, pendingRequestsCts);
297 throw;
298 }
299 finally
300 {
301 FinishSend(cts, disposeCts, telemetryStarted, responseContentTelemetryStarted);
302 }
303 }
Task CopyToAsync(Stream destination)
Definition Stream.cs:571
static void FinishSend(CancellationTokenSource cts, bool disposeCts, bool telemetryStarted, bool responseContentTelemetryStarted)
void HandleFailure(Exception e, bool telemetryStarted, HttpResponseMessage response, CancellationTokenSource cts, CancellationToken cancellationToken, CancellationTokenSource pendingRequestsCts)
CancellationTokenSource bool CancellationTokenSource PendingRequestsCts PrepareCancellationTokenSource(CancellationToken cancellationToken)
static void ThrowForNullResponse([NotNull] HttpResponseMessage response)
static bool StartSend(HttpRequestMessage request)
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226

References System.Net.Http.HttpClient._maxResponseContentBufferSize, System.buffer, System.cancellationToken, System.Threading.Tasks.Task< TResult >.ConfigureAwait(), System.Net.Http.HttpResponseMessage.Content, System.Net.Http.Headers.HttpContentHeaders.ContentLength, System.IO.Stream.CopyToAsync(), System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode(), System.Net.Http.HttpClient.FinishSend(), System.Net.Http.HttpClient.HandleFailure(), System.Net.Http.HttpContent.Headers, System.L, System.Net.Http.HttpTelemetry.Log, System.Net.Http.HttpClient.PrepareCancellationTokenSource(), System.Net.Http.HttpContent.ReadAsStreamAsync(), System.Net.Http.HttpClient.StartSend(), System.stream, System.Net.Http.HttpContent.StreamCopyExceptionNeedsWrapping(), System.Net.Http.HttpClient.ThrowForNullResponse(), System.Threading.CancellationTokenSource.Token, System.Net.Http.HttpContent.TryReadAsStream(), and System.Net.Http.HttpContent.WrapStreamCopyException().

Referenced by System.Net.Http.HttpClient.GetByteArrayAsync().