Issue #23095, asyncio: IocpProactor.close() must not cancel pending
_WaitCancelFuture futures
diff --git a/Lib/asyncio/windows_events.py b/Lib/asyncio/windows_events.py
index 5105426..3cb5690f 100644
--- a/Lib/asyncio/windows_events.py
+++ b/Lib/asyncio/windows_events.py
@@ -163,6 +163,9 @@
 
         self._done_callback = None
 
+    def cancel(self):
+        raise RuntimeError("_WaitCancelFuture must not be cancelled")
+
     def _schedule_callbacks(self):
         super(_WaitCancelFuture, self)._schedule_callbacks()
         if self._done_callback is not None:
@@ -693,6 +696,9 @@
             # FIXME: Tulip issue 196: remove this case, it should not happen
             elif fut.done() and not fut.cancelled():
                 del self._cache[address]
+            elif isinstance(fut, _WaitCancelFuture):
+                # _WaitCancelFuture must not be cancelled
+                pass
             else:
                 try:
                     fut.cancel()