Issue #28371: Deprecate passing asyncio.Handles to run_in_executor.
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index af66c0a..648b9b9 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -605,6 +605,9 @@
         if isinstance(func, events.Handle):
             assert not args
             assert not isinstance(func, events.TimerHandle)
+            warnings.warn(
+                "Passing Handle to loop.run_in_executor() is deprecated",
+                DeprecationWarning)
             if func._cancelled:
                 f = self.create_future()
                 f.set_result(None)
diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
index 362ab06..a9aba0f 100644
--- a/Lib/test/test_asyncio/test_base_events.py
+++ b/Lib/test/test_asyncio/test_base_events.py
@@ -358,7 +358,8 @@
         h = asyncio.Handle(cb, (), self.loop)
         h.cancel()
 
-        f = self.loop.run_in_executor(None, h)
+        with self.assertWarnsRegex(DeprecationWarning, "Passing Handle"):
+            f = self.loop.run_in_executor(None, h)
         self.assertIsInstance(f, asyncio.Future)
         self.assertTrue(f.done())
         self.assertIsNone(f.result())
@@ -373,12 +374,14 @@
 
         self.loop.set_default_executor(executor)
 
-        res = self.loop.run_in_executor(None, h)
+        with self.assertWarnsRegex(DeprecationWarning, "Passing Handle"):
+            res = self.loop.run_in_executor(None, h)
         self.assertIs(f, res)
 
         executor = mock.Mock()
         executor.submit.return_value = f
-        res = self.loop.run_in_executor(executor, h)
+        with self.assertWarnsRegex(DeprecationWarning, "Passing Handle"):
+            res = self.loop.run_in_executor(executor, h)
         self.assertIs(f, res)
         self.assertTrue(executor.submit.called)