def METHOD_NAME() -> None:
    loop = asyncio.new_event_loop()
    # We assume that the lines above this will never fail,
    # so we will always reach this point to unblock the parent thread.
    loop_mailbox.put(loop)
    loop.run_forever()
    # If we've reached here, the loop has been stopped from outside this thread. Clean it up.
    #
    # This cleanup is naive because asyncio makes it difficult and confusing to get it right.
    # Compare this with asyncio.run()'s cleanup, which:
    #
    # * Cancels and awaits any remaining tasks
    #   (according to the source code--this seems undocumented)
    # * Shuts down asynchronous generators
    #   (see asyncio.shutdown_asyncgens())
    # * Shuts down the default thread pool executor
    #   (see https://bugs.python.org/issue34037 and asyncio.shutdown_default_executor())
    #
    # In Python >=3.11, we should rewrite this to use asyncio.Runner,
    # which can take care of these nuances for us.
    loop.close()