anchor.diff:    Paused -> Halted
   
     Halted -> Final (GC-ed here)
  -
  -  with state:
  -
  -  Started 
   *)
   
   /// Create a new receiver, with a queue description,
  
positive.code:           | Pause -> ct.Cancel() ; return! paused state
            | Halt -> ct.Cancel(); return! halted state
            | SubscribeQueue(qd, cc) ->
              let! pairs = initReceiverSet qd newMf cc
              for Pair(mf, rs) in pairs do
                for r in rs do Async.Start(r |> worker, ct.Token)
              let qsubs' = state.QSubs.Add(qd, pairs)
              return! started { QSubs = qsubs' ; TSubs = state.TSubs } ct
            | UnsubscribeQueue qd ->
              (* todo *) return! started state ct
            | SubscribeTopic(td, cc) ->
              (* todo *) return! started state ct
            | UnsubscribeTopic td ->
            (* todo *) return! started state ct
            | _ -> (* ignore Start *) return! started state ct }
  
        and paused state =
  
negative.code:     let _ = messages.TryTake(&item, timeout.Milliseconds)
      item
  
    member __.Consume() = asyncSeq { while true do yield messages.Take() }
  
    interface System.IDisposable with
      /// Cleans out all receivers and factories.
      member x.Dispose () = 
        logger.DebugFormat("dispose called for receiver on '{0}'", desc.Path)
        a.Post Halt
  
  [<Extension>]
  type ReceiverModule =
  