Issue #22922: Fix ProactorEventLoop.close()

Close the IocpProactor before closing the event loop. IocpProactor.close() can
call loop.call_soon(), which is forbidden when the event loop is closed.
diff --git a/Lib/asyncio/proactor_events.py b/Lib/asyncio/proactor_events.py
index 0a4d068..5986e37 100644
--- a/Lib/asyncio/proactor_events.py
+++ b/Lib/asyncio/proactor_events.py
@@ -387,13 +387,19 @@
             raise RuntimeError("Cannot close a running event loop")
         if self.is_closed():
             return
+
+        # Call these methods before closing the event loop (before calling
+        # BaseEventLoop.close), because they can schedule callbacks with
+        # call_soon(), which is forbidden when the event loop is closed.
         self._stop_accept_futures()
         self._close_self_pipe()
-        super().close()
         self._proactor.close()
         self._proactor = None
         self._selector = None
 
+        # Close the event loop
+        super().close()
+
     def sock_recv(self, sock, n):
         return self._proactor.recv(sock, n)