title: What happens to existing awaits when WebSocket.close is called
body: <p>If I open a Starlette/FastAPI WebSocket, what happens to any coroutines currently waiting to receive data from the client if I close the WebSocket from outside the coroutine? Does the call to <code>receive</code> raise an exception or does the coroutine sit in memory forever because it is never going to receive anything?</p>
  
  <pre><code>from fastapi import FastAPI
  from fastapi.websockets import WebSocket
  
  app = FastAPI()
  
  open_sockets = {}
  
  @app.websocket('/connection/')
  async def connection(websocket: WebSocket):
      await websocket.accept()
  
      id = await websocket.receive_json()['id']
      open_sockets[id] = websocket
  
      while True:
          data = await websocket.receive_json()
  
  @app.post('/kill/{id}/')
  async def kill(id=str):
      # What does this do to the above `await websocket.receive_json()`?
      await open_sockets[id].close()
      del open_sockets[id]
  </code></pre>