async def request(self,<EOL>item: BaseRequestResponseEvent[TResponse],<EOL>config: Optional[BroadcastConfig] = None) -> TResponse:
item._origin = self.name<EOL>item._id = str(uuid.uuid4())<EOL>future: asyncio.Future = asyncio.Future(loop=self.event_loop)<EOL>self._futures[item._id] = future<EOL>self.broadcast(item, config)<EOL>future.add_done_callback(functools.partial(self._remove_cancelled_future, item._id))<EOL>result = await future<EOL>expected_response_type = item.expected_response_type()<EOL>if not isinstance(result, expected_response_type):<EOL><INDENT>raise UnexpectedResponse(<EOL>f"<STR_LIT>"<EOL>)<EOL><DEDENT>return result<EOL>
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.