anchor.diff:      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 ->
  
positive.code:             // group events into groups by document
              |> PSeq.groupBy snd
              // group items into numWorkers batches
              |> PSeq.mapi(fun i x -> (i % numWorkers,x))
              |> PSeq.groupBy fst
              // map to async tasks
              |> PSeq.map (fun (_, workItems) -> async {
  
negative.code:                     workItems
                      |> Seq.map snd
                  let! reversedItems = Async.foldM accumulateItems [] docs
                  let result = List.rev reversedItems |> Seq.concat
                  return result
              })
              |> Async.Parallel
              |> Async.RunSynchronously
  