in tools/code/common/Http.cs [253:281]
private static async ValueTask<Response> WaitForLongRunningOperation(this HttpPipeline pipeline, Response response, CancellationToken cancellationToken)
{
var updatedResponse = response;
while (((updatedResponse.Status is (int)HttpStatusCode.OK or (int)HttpStatusCode.Created && IsProvisioningInProgress(updatedResponse)) ||
updatedResponse.Status == (int)HttpStatusCode.Accepted)
&& updatedResponse.Headers.TryGetValue("Location", out var locationHeaderValue)
&& Uri.TryCreate(locationHeaderValue, UriKind.Absolute, out var locationUri)
&& locationUri is not null)
{
if (updatedResponse.Headers.TryGetValue("Retry-After", out var retryAfterString) && int.TryParse(retryAfterString, out var retryAfterSeconds))
{
var retryAfterDuration = TimeSpan.FromSeconds(retryAfterSeconds);
await Task.Delay(retryAfterDuration, cancellationToken);
}
else
{
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
using var request = pipeline.CreateRequest(locationUri, RequestMethod.Get);
updatedResponse = await pipeline.SendRequestAsync(request, cancellationToken);
if (updatedResponse.IsError)
{
throw updatedResponse.ToHttpRequestException(locationUri);
}
}
return updatedResponse;
}