public void UpdateBaseUrls(string[] baseUrls)
        {
            var dict = baseUrls
                       .Distinct()
                       .ToDictionary(x => x, _ => WeightItem.CreateDefaultItem());

            UrlResourceManager.UpdateResources(dict);
        }
 private Task <IReadOnlyList <RetryActionResult <string, HttpResponseMessage> > > SendAsyncWithDiag(
     string url,
     Func <string, Task <HttpResponseMessage> > send)
 {
     return(UrlResourceManager.ExecuteAsyncWithDiag(async(source, _) =>
     {
         var combinedUrl = $"{source.TrimEnd('/')}/{url.TrimStart('/')}";
         // Special timeout handling for HttpClient
         using (var cts = new CancellationTokenSource())
         {
             if (Timeout.HasValue)
             {
                 cts.CancelAfter(Timeout.Value);
             }
             try
             {
                 var res = await send(combinedUrl);
                 if (IsTransientHttpStatusCode(res.StatusCode))
                 {
                     throw new TransientHttpRequestException(
                         url,
                         combinedUrl,
                         res,
                         $"Response status code does not indicate success: ${res.StatusCode}");
                 }
                 if (!res.IsSuccessStatusCode)
                 {
                     throw new HttpErrorResponseException(
                         url,
                         combinedUrl,
                         res);
                 }
                 var errorCode = _isErrorResponse(res, await res.Content.ReadAsStringAsync());
                 if (errorCode > 0)
                 {
                     throw new HttpErrorResponseException(
                         url,
                         combinedUrl,
                         res);
                 }
                 return res;
             }
             catch (HttpRequestException e)
             {
                 throw new ServiceUnavailableException(url, combinedUrl, e.Message, e);
             }
             catch (TaskCanceledException e)
                 when(!cts.Token.IsCancellationRequested)
                 {
                     throw new RequestTimeoutException(url, combinedUrl, "Operation timeout", e);
                 }
         }
     }, _shouldRetry, RaiseOnError));
 }