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

◆ SendAsync() [4/4]

Task< HttpResponseMessage > System.Net.Http.HttpClient.SendAsync ( HttpRequestMessage request,
HttpCompletionOption completionOption,
CancellationToken cancellationToken )
inline

Definition at line 556 of file HttpClient.cs.

557 {
558 CheckRequestBeforeSend(request);
559 var (cts2, disposeCts2, pendingRequestsCts2) = PrepareCancellationTokenSource(cancellationToken);
560 return Core(request, completionOption, cts2, disposeCts2, pendingRequestsCts2, cancellationToken);
561 async Task<HttpResponseMessage> Core(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, bool disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
562 {
563 bool telemetryStarted = StartSend(request);
564 bool responseContentTelemetryStarted = false;
565 HttpResponseMessage response = null;
566 try
567 {
568 response = await base.SendAsync(request, cts.Token).ConfigureAwait(continueOnCapturedContext: false);
569 ThrowForNullResponse(response);
570 if (ShouldBufferResponse(completionOption, request))
571 {
572 if (HttpTelemetry.Log.IsEnabled() && telemetryStarted)
573 {
574 HttpTelemetry.Log.ResponseContentStart();
575 responseContentTelemetryStarted = true;
576 }
577 await response.Content.LoadIntoBufferAsync(_maxResponseContentBufferSize, cts.Token).ConfigureAwait(continueOnCapturedContext: false);
578 }
579 return response;
580 }
581 catch (Exception e)
582 {
583 HandleFailure(e, telemetryStarted, response, cts, originalCancellationToken, pendingRequestsCts);
584 throw;
585 }
586 finally
587 {
588 FinishSend(cts, disposeCts, telemetryStarted, responseContentTelemetryStarted);
589 }
590 }
591 }
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)
void CheckRequestBeforeSend(HttpRequestMessage request)
CancellationTokenSource bool CancellationTokenSource PendingRequestsCts PrepareCancellationTokenSource(CancellationToken cancellationToken)
static void ThrowForNullResponse([NotNull] HttpResponseMessage response)
static bool StartSend(HttpRequestMessage request)
static bool ShouldBufferResponse(HttpCompletionOption completionOption, HttpRequestMessage request)

References System.Net.Http.HttpClient._maxResponseContentBufferSize, System.cancellationToken, System.Net.Http.HttpClient.CheckRequestBeforeSend(), System.Threading.Tasks.Task< TResult >.ConfigureAwait(), System.Net.Http.HttpResponseMessage.Content, System.Net.Http.HttpClient.FinishSend(), System.Net.Http.HttpClient.HandleFailure(), System.Net.Http.HttpContent.LoadIntoBufferAsync(), System.Net.Http.HttpTelemetry.Log, System.Net.Http.HttpClient.PrepareCancellationTokenSource(), System.Net.Http.HttpClient.ShouldBufferResponse(), System.Net.Http.HttpClient.StartSend(), System.Net.Http.HttpClient.ThrowForNullResponse(), and System.Threading.CancellationTokenSource.Token.