code: func (b *DispatcherBatch) CallTimeout(timeout time.Duration) error {
  	b.lock.Lock()
  	bb := b.b
  	b.b = b.c.c.NewBatch()
  	ops := b.ops
  	b.ops = nil
  	b.lock.Unlock()
  
  	if err := bb.CallTimeout(timeout); err != nil {
  		return err
  	}
  
  	for _, op := range ops {
  		br := op.ctx.(*BatchResult)
  		op.Response, op.Error = getResponse(br.Response, br.Error)
  		close(op.done)
  	}
  
  	return nil
  }
docs: // CallTimeout calls all the RPCs added via DispatcherBatch.Add() and waits
  // for all the RPC responses during the given timeout.
  //
  // The order of batched RPCs execution on the server is unspecified.
  // Usually batched RPCs are executed concurrently on the server.
  //
  // The caller may read all BatchResult contents returned
  // from DispatcherBatch.Add() after the CallTimeout returns.
  //
  // It is guaranteed that all <-BatchResult.Done channels are unblocked after
  // the CallTimeout returns.