docs: def asynciotask(  # noqa: F811
      func: typing.Optional[typing.Callable[..., "typing.Awaitable[typing.Any]"]] = None,
      *,
      loop_getter: typing.Union[
          typing.Callable[..., asyncio.AbstractEventLoop], asyncio.AbstractEventLoop
      ] = asyncio.get_event_loop,
      loop_getter_need_context: bool = False,
  ) -> typing.Union[AsyncIOTask, typing.Callable[..., "asyncio.Task[typing.Any]"]]:
      """Wrap function in future and return.
  
      :param func: Function to wrap
      :type func: typing.Optional[typing.Callable[..., typing.Awaitable]]
      :param loop_getter: Method to get event loop, if wrap in asyncio task
      :type loop_getter: typing.Union[
                             typing.Callable[..., asyncio.AbstractEventLoop],
                             asyncio.AbstractEventLoop
                         ]
      :param loop_getter_need_context: Loop getter requires function context
      :type loop_getter_need_context: bool
      :return: AsyncIOTask instance, if called as function or argumented decorator, else callable wrapper
      :rtype: typing.Union[AsyncIOTask, typing.Callable[..., asyncio.Task]]
      """
      if func is None:
          return AsyncIOTask(func=func, loop_getter=loop_getter, loop_getter_need_context=loop_getter_need_context)
      return AsyncIOTask(  # type: ignore
          func=None, loop_getter=loop_getter, loop_getter_need_context=loop_getter_need_context
      )(func)