Цитата из
документации:
Return the currently running Task instance, or None if no task is running.
Как я это понимаю, если ты запланировал выполнение функции как задачи через asyncio.create_task(), то эта функция, и все, вызываемые в ней, смогут получить объект задачи, вызвав asyncio.current_task().
Если же управление в текущую функции было передано без использования задач на любом из уровней, только через await вызовы, то current_task() вернёт None.
Но вообще довольно странно. Эксперимент показывает, что хотя бы одна задача должна быть.
Вот код
import asyncio
async def print_task():
print(asyncio.current_task())
async def foobar():
await print_task()
async def main():
print('Direct call')
await foobar()
print('create_task')
task = asyncio.create_task(foobar())
await task
# asyncio.run(main()) # даст такой же результат
asyncio.get_event_loop().run_until_complete(main())
На питоне 3.11 код выводит два объекта задачи, один создаётся run() или run_until_complete(), а другой - create_task(). Тогда получается, что получить None невозможно.