docs: async def request(self,
                        item: BaseRequestResponseEvent[TResponse],
                        config: Optional[BroadcastConfig] = None) -> TResponse:
          """
          Broadcast an instance of :class:`~lahja.misc.BaseRequestResponseEvent` on the event bus and
          immediately wait on an expected answer of type :class:`~lahja.misc.BaseEvent`. Optionally
          pass a second parameter of :class:`~lahja.misc.BroadcastConfig` to decide where the request
          should be broadcasted to. By default, requests are broadcasted across all connected
          endpoints with their consuming call sites.
          """
          item._origin = self.name
          item._id = str(uuid.uuid4())
  
          future: asyncio.Future = asyncio.Future(loop=self.event_loop)
          self._futures[item._id] = future
  
          self.broadcast(item, config)
  
          future.add_done_callback(functools.partial(self._remove_cancelled_future, item._id))
  
          result = await future
  
          expected_response_type = item.expected_response_type()
          if not isinstance(result, expected_response_type):
              raise UnexpectedResponse(
                  f"The type of the response is {type(result)}, expected: {expected_response_type}"
              )
  
          return result