diff --git a/starlette/testclient.py b/starlette/testclient.py index f17d4e892..bf928d23f 100644 --- a/starlette/testclient.py +++ b/starlette/testclient.py @@ -160,7 +160,8 @@ async def run_app(tg: anyio.abc.TaskGroup) -> None: async def _asgi_receive(self) -> Message: while self._receive_queue.empty(): - await anyio.sleep(0) + self._queue_event = anyio.Event() + await self._queue_event.wait() return self._receive_queue.get() async def _asgi_send(self, message: Message) -> None: @@ -189,6 +190,8 @@ def _raise_on_close(self, message: Message) -> None: def send(self, message: Message) -> None: self._receive_queue.put(message) + if hasattr(self, "_queue_event"): + self.portal.start_task_soon(self._queue_event.set) def send_text(self, data: str) -> None: self.send({"type": "websocket.receive", "text": data})