anchor.diff:  
       use timeoutTok = new System.Threading.CancellationTokenSource()
       timeoutTok.CancelAfter(60000)
  +    let shouldRetry () =
  +        iTry < nTries
       let shouldRetryTimeout exn =
           let exnNames = getExceptionNames exn
  -        iTry < nTries &&
  +        shouldRetry () &&
               (timeoutTok.IsCancellationRequested && (exnNames |> List.contains "OperationCanceledException" ))
   
       async {
  
positive.code:             return SuccessResponse raw
          with
          | exn when shouldRetryTimeout exn ->
              Logging.traceWarnfn "Request to '%O' didn't respond after 60 seconds, trying again %i/%i" uri iTry nTries
              return! _safeGetFromUrl(auth, url, contentType, iTry + 1, nTries)
          | :? OperationCanceledException as cancel when timeoutTok.IsCancellationRequested ->
              raise (Exception(sprintf "Request to '%O' finally timed out after 60 seconds after several retries" uri, exn))
          | :? RequestFailedException as w ->
              match w.Info with
              | Some { StatusCode = HttpStatusCode.NotFound } -> return NotFound
  
negative.code:             let uri = Uri url
              use client = createHttpClient (url,auth)
              let! tok = Async.CancellationToken
              let tokSource = System.Threading.CancellationTokenSource.CreateLinkedTokenSource(tok, timeoutTok.Token)
  
              if notNullOrEmpty contentType then
                  addAcceptHeader client contentType
  