anchor.diff:          else
               workHandle.Reprioritize WorkPriority.BlockingWork
               use d = Profile.startCategory (Profile.Category.ResolverAlgorithmBlocked blockReason)
  +            let isFinished = workHandle.Task.Wait(60000)
  +            if not isFinished then
  +                raise <| new TimeoutException("Waited 60 seconds for a request to finish, maybe a bug in the paket request scheduler.")
               let result = workHandle.Task.Result
               d.Dispose()
               result
  
positive.code:     let addWork prio (f: unit -> System.Threading.Tasks.Task<'a>) ({ DynamicQueue = queue } as q) =
          let tcs = new TaskCompletionSource<_>()
          let work =
              { StartWork = (fun () -> 
                  f().ContinueWith(fun (t:System.Threading.Tasks.Task<'a>) -> 
                      if t.IsCanceled then
                          tcs.SetException(new TaskCanceledException(t))
                      elif t.IsFaulted then
  
negative.code:     let rec private getNext ({ DynamicQueue = queue } as d) =
          if queue.Count = 0 then None
          else
              let min =
                  // cannot minBy as the sequence might be empty by now.
                  queue |> Seq.fold (fun currentMin kv ->
                      match currentMin with
                      | None -> Some (kv.Key, kv.Value)
                      | Some (minKey, min) when kv.Value.Priority < min.Priority -> Some (kv.Key, kv.Value)
                      | min -> min) None
              match min with
              | Some (minKey, min) ->
                  match queue.TryRemove(minKey) with
                  | true, min ->
                      Some min
                  | _ ->
                      getNext d
              | None -> getNext d
      let startProcessing (cts:CancellationToken) ({ DynamicQueue = queue } as q) =
          async {
              while not cts.IsCancellationRequested do
  