code: func newAsyncConnHdl(spec *ConnectionSpec) *asyncConnHdl {
  
  	c := new(asyncConnHdl)
  
  	// connection base
  	connHdl := newConnHdl(spec) // panics
  	c.super = connHdl
  
  	// conn management
  	c.managerCtl = make(workerCtl)
  	c.feedback = make(chan workerStatus)
  	c.shutdown = make(chan bool, 1)
  
  	// request processing
  	c.writer = bufio.NewWriterSize(connHdl.conn, spec.wBufSize)
  	c.reqProcCtl = make(workerCtl)
  	c.pendingReqs = make(chan asyncReqPtr, spec.reqChanCap) // REVU for PubSub
  
  	// fault processing
  	c.faults = make(chan asyncReqPtr, spec.reqChanCap) // REVU - not sure about sizing
  
  	// response processing
  	c.rspProcCtl = make(workerCtl)
  
  	switch spec.protocol {
  	case REDIS_DB:
  		c.heartbeatCtl = make(workerCtl)
  		c.pendingResps = make(chan asyncReqPtr, spec.rspChanCap)
  	case REDIS_PUBSUB:
  		c.subscriptions = make(map[string]*Subscription)
  	}
  
  	// REVU - this is state - TODO move to startup
  	c.isShutdown = false
  
  	return c
  }
docs: // Creates a new asyncConnHdl with a new connHdl as its delegated 'super'.
  // Note it does not start the processing goroutines for the channels.
  //
  // REVU - PubSub could be checked here