anchor.diff:              // group events into groups by document
               |> PSeq.groupBy snd
               // group items into numWorkers batches
  -            |> PSeq.mapi(fun i x -> (i % numWorkers,x))
  +            |> PSeq.mapi(fun i x ->
  +                queuedMessagesCounter.Increment()
  +                (i % numWorkers,x))
               |> PSeq.groupBy fst
               // map to async tasks
               |> PSeq.map (fun (_, workItems) -> async {
  
positive.code:                     workItems
                      |> Seq.map snd
                  let! reversedItems = Async.foldM accumulateItems [] docs
                  return List.rev reversedItems |> Seq.concat
              })
              |> Async.Parallel
              |> Async.RunSynchronously
  
negative.code:     let documentsWithKeys msg =
          BulkProjector.allMatchingKeys projectors msg
  
      let queuedMessagesCounter = Metric.Counter(databaseName + " RavenReplayProjector documents awaiting projection", Unit.Items)
  
      let accumulateItems s ((key, projectorIndex), items) = async {
          let events = items |> Seq.map fst
          let projector = projectors.[projectorIndex]
  
          try
              let! writeRequests, _ = projector.ProcessEvents key events
              queuedMessagesCounter.Decrement()
              return writeRequests :: s
          with
          | ex ->
  