# Buggy code
async def start_polling(
    self,
    timeout=20,
    relax=0.1,
    limit=None,
    reset_webhook=None,
    fast: typing.Optional[bool] = True,
    error_sleep: int = 5,
):
    """
    Start long-polling

    :param timeout:
    :param relax:
    :param limit:
    :param reset_webhook:
    :param fast:
    :return:
    """
    if self._polling:
        raise RuntimeError("Polling already started")

    log.info("Start polling.")

    # context.set_value(MODE, LONG_POLLING)
    Dispatcher.set_current(self)
    Bot.set_current(self.bot)

    if reset_webhook is None:
        await self.reset_webhook(check=False)
    if reset_webhook:
        await self.reset_webhook(check=True)

    self._polling = True
    offset = None
    try:
        current_request_timeout = self.bot.timeout
        if current_request_timeout is not sentinel and timeout is not None:
            request_timeout = aiohttp.ClientTimeout(
                total=current_request_timeout.total + timeout or 1
            )
        else:
            request_timeout = None

        while self._polling:
            try:
                with self.bot.request_timeout(request_timeout):
                    updates = await self.bot.get_updates(
                        limit=limit, offset=offset, timeout=timeout
                    )
            except asyncio.CancelledError:
                break
            except:
                log.exception("Cause exception while getting updates.")
                await asyncio.sleep(error_sleep)
                continue

            if updates:
                log.debug(f"Received {len(updates)} updates.")
                offset = updates[-1].update_id + 1

                self.loop.create_task(self._process_polling_updates(updates, fast))

            if relax:
                await asyncio.sleep(relax)

    finally:
        self._close_waiter.set_result(None)
        log.warning("Polling is stopped.")


# Traceback (RuntimeError)
INFO:     91.108.6.40:0 - "POST /updates/ HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 385, in run_asgi
result = await app(self.scope, self.receive, self.send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in __call__
return await self.app(scope, receive, send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/applications.py", line 102, in __call__
await self.middleware_stack(scope, receive, send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in __call__
raise exc from None
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc from None
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 550, in __call__
await route.handle(scope, receive, send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle
await self.app(scope, receive, send)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/starlette/endpoints.py", line 30, in dispatch
response = await handler(request)
File "/home/vitaliy/coding/telegram-evernote-bot/src/views.py", line 57, in post
await process_update(update_data)
File "/home/vitaliy/coding/telegram-evernote-bot/src/services/updates.py", line 13, in process_update
return await dispatcher.process_update(update)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/dispatcher/dispatcher.py", line 214, in process_update
return await self.message_handlers.notify(update.message)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/dispatcher/handler.py", line 117, in notify
response = await handler_obj.handler(*args, **partial_data)
File "/home/vitaliy/coding/telegram-evernote-bot/src/bot.py", line 21, in send_help_message
await message.reply(
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/types/message.py", line 995, in reply
return await self.bot.send_message(
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/bot/bot.py", line 219, in send_message
result = await self.request(api.Methods.SEND_MESSAGE, payload)
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/bot/base.py", line 201, in request
return await api.make_request(self.session, self.__token, method, data, files,
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiogram/bot/api.py", line 103, in make_request
async with session.post(url, data=req, **kwargs) as response:
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiohttp/client.py", line 1012, in __aenter__
self._resp = await self._coro
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiohttp/client.py", line 426, in _request
with timer:
File "/home/vitaliy/.cache/pypoetry/virtualenvs/telegram-evernote-bot-IC7bT7Nj-py3.8/lib/python3.8/site-packages/aiohttp/helpers.py", line 579, in __enter__
raise RuntimeError('Timeout context manager should be used '
RuntimeError: Timeout context manager should be used inside a task

# Fixed code
async def start_polling(
    self,
    timeout=20,
    relax=0.1,
    limit=None,
    reset_webhook=None,
    fast: typing.Optional[bool] = True,
    error_sleep: int = 5,
):
    """
    Start long-polling

    :param timeout:
    :param relax:
    :param limit:
    :param reset_webhook:
    :param fast:
    :return:
    """
    if self._polling:
        raise RuntimeError("Polling already started")

    log.info("Start polling.")

    # context.set_value(MODE, LONG_POLLING)
    Dispatcher.set_current(self)
    Bot.set_current(self.bot)

    if reset_webhook is None:
        await self.reset_webhook(check=False)
    if reset_webhook:
        await self.reset_webhook(check=True)

    self._polling = True
    offset = None
    try:
        current_request_timeout = self.bot.timeout
        if current_request_timeout is not sentinel and timeout is not None:
            request_timeout = aiohttp.ClientTimeout(
                total=current_request_timeout.total + timeout or 1
            )
        else:
            request_timeout = None

        while self._polling:
            try:
                with self.bot.request_timeout(request_timeout):
                    updates = await self.bot.get_updates(
                        limit=limit, offset=offset, timeout=timeout
                    )
            except asyncio.CancelledError:
                break
            except:
                log.exception("Cause exception while getting updates.")
                await asyncio.sleep(error_sleep)
                continue

            if updates:
                log.debug(f"Received {len(updates)} updates.")
                offset = updates[-1].update_id + 1

                self._loop_create_task(self._process_polling_updates(updates, fast))

            if relax:
                await asyncio.sleep(relax)

    finally:
        self._close_waiter.set_result(None)
        log.warning("Polling is stopped.")