anchor.diff:                      ensureDir targetFileName
   
                       use _trackDownload = Profile.startCategory Profile.Category.NuGetDownload
  +                    let! tok = Async.CancellationToken
  +                    let taskTimeout =
  +                        match Environment.GetEnvironmentVariable("PAKET_RESOLVER_TASK_TIMEOUT") with
  +                        | a when System.String.IsNullOrWhiteSpace a -> RequestTimeout
  +                        | a ->
  +                            match System.Int32.TryParse a with
  +                            | true, v -> v
  +                            | _ -> traceWarnfn "PAKET_RESOLVER_TASK_TIMEOUT is not set to an interval in milliseconds, ignoring the value and defaulting to %d" RequestTimeout
  +                                   (TimeSpan.FromMinutes 1.0).Milliseconds
  +                    let s = System.Threading.CancellationTokenSource.CreateLinkedTokenSource(tok)
  +                    let t = System.Threading.CancellationTokenSource.CreateLinkedTokenSource(tok)
  +                    tracefn "taskTimeout set to %d: " taskTimeout
  +                    s.CancelAfter taskTimeout//(TimeSpan.FromMinutes 1.0)
  +                    t.CancelAfter taskTimeout
   
                       let client = NetUtils.createHttpClient(!downloadUrl, source.Auth.Retrieve (attempt <> 0))
   
  
positive.code:                             lastSpeedMeasure.Restart()
                          // if there is no response for a minute -> abort
  
                          let s = System.Threading.CancellationTokenSource.CreateLinkedTokenSource(tok)
                          s.CancelAfter (60000)
                          let! bytes = httpResponseStream.ReadAsync(buffer, 0, bufferSize, s.Token) |> Async.AwaitTaskWithoutAggregate
                          //let! bytes = httpResponseStream.AsyncRead(buffer, 0, bufferSize)
                          bytesRead := bytes
  
negative.code:                     let mutable readSinceLastMeasure = 0L
  
                      let requestMsg = new HttpRequestMessage(HttpMethod.Get, downloadUri)
                      let! responseMsg = client.SendAsync(requestMsg, HttpCompletionOption.ResponseHeadersRead, t.Token) |> Async.AwaitTask
                      match responseMsg.StatusCode with
                      | HttpStatusCode.OK -> ()
                      | statusCode -> failwithf "HTTP status code was %d - %O" (int statusCode) statusCode
  
                      let! httpResponseStream = responseMsg.Content.ReadAsStreamAsync() |> Async.AwaitTask
                      httpResponseStream.ReadTimeout <- Timeout.Infinite;
  
                      let bufferSize = 1024 * 10
                      let buffer : byte [] = Array.zeroCreate bufferSize
  