anchor.diff:  
   type internal Agent<'T> = AutoCancelAgent<'T>
   
  -(* cancelling through dispose *)
  +/// communication with the worker agent
   type RecvMsg =
     Start
     | Pause
     | Halt
  -  | SubscribeQueue of QueueDescription
  +  | SubscribeQueue of QueueDescription * Concurrency
     | UnsubscribeQueue of QueueDescription
  -  | SubscribeTopic of TopicDescription
  +  | SubscribeTopic of TopicDescription * Concurrency
     | UnsubscribeTopic of TopicDescription
  +
  +/// concurrently outstanding asynchronous requests
  +and Concurrency = int
   
   type WorkerState =
     { QSubs : Map<QueueDescription, ReceiverSet list>;
  
positive.code:           match msg with
            | Pause -> ct.Cancel() ; return! paused state
            | Halt -> ct.Cancel(); return! halted state
            | SubscribeQueue qd ->
              (* todo *) return! started state ct
            | UnsubscribeQueue qd ->
              (* todo *) return! started state ct
            | SubscribeTopic td ->
              (* todo *) return! started state ct
            | UnsubscribeTopic td ->
            (* todo *) return! started state ct
  
negative.code:         async { 
            let! msg = inbox.Receive()
            match msg with
            | Start -> return! starting state
            | Halt -> return! halted state
            | _ as x -> logger.Warn(sprintf "got %A, despite being paused" x) }
  
  