@@ -1208,3 +1208,48 @@ def test_function(**kwargs: Any) -> None:
1208
1208
1209
1209
# SyncToAsync.__call__.loop.run_in_executor has a param named `task_context`.
1210
1210
await test_function (task_context = 1 )
1211
+
1212
+
1213
+ def test_nested_task () -> None :
1214
+ async def inner () -> asyncio .Task [None ]:
1215
+ return asyncio .create_task (sync_to_async (print )("inner" ))
1216
+
1217
+ async def main () -> None :
1218
+ task = await sync_to_async (async_to_sync (inner ))()
1219
+ await task
1220
+
1221
+ async_to_sync (main )()
1222
+
1223
+
1224
+ def test_nested_task_later () -> None :
1225
+ def later (fut : asyncio .Future [asyncio .Task [None ]]) -> None :
1226
+ task = asyncio .create_task (sync_to_async (print )("later" ))
1227
+ fut .set_result (task )
1228
+
1229
+ async def inner () -> asyncio .Future [asyncio .Task [None ]]:
1230
+ loop = asyncio .get_running_loop ()
1231
+ fut = loop .create_future ()
1232
+ loop .call_later (0.1 , later , fut )
1233
+ return fut
1234
+
1235
+ async def main () -> None :
1236
+ fut = await sync_to_async (async_to_sync (inner ))()
1237
+ task = await fut
1238
+ await task
1239
+
1240
+ async_to_sync (main )()
1241
+
1242
+
1243
+ def test_double_nested_task () -> None :
1244
+ async def inner () -> asyncio .Task [None ]:
1245
+ return asyncio .create_task (sync_to_async (print )("inner" ))
1246
+
1247
+ async def outer () -> asyncio .Task [asyncio .Task [None ]]:
1248
+ return asyncio .create_task (sync_to_async (async_to_sync (inner ))())
1249
+
1250
+ async def main () -> None :
1251
+ outer_task = await sync_to_async (async_to_sync (outer ))()
1252
+ inner_task = await outer_task
1253
+ await inner_task
1254
+
1255
+ async_to_sync (main )()
0 commit comments