diff --git a/telegram/client.py b/telegram/client.py
index 4e232bd..a1afdc6 100644
--- a/telegram/client.py
+++ b/telegram/client.py
@@ -221,8 +221,8 @@ class Telegram:
 
     def get_message(
         self,
-        chat_id,
-        message_id,
+        chat_id: int,
+        message_id: int,
     ) -> AsyncResult:
         """
         Return a message via its message_id
diff --git a/telegram/utils.py b/telegram/utils.py
index 97a65c0..879b480 100644
--- a/telegram/utils.py
+++ b/telegram/utils.py
@@ -1,5 +1,5 @@
-import time
 import uuid
+import threading
 from typing import TYPE_CHECKING, Any, Dict, Optional
 
 if TYPE_CHECKING:
@@ -25,6 +25,7 @@ class AsyncResult:
         self.error = False
         self.error_info: Optional[Dict[Any, Any]] = None
         self.update: Optional[Dict[Any, Any]] = None
+        self._ready = threading.Event()
 
     def __str__(self) -> str:
         return f'AsyncResult <{self.id}>'
@@ -33,15 +34,11 @@ class AsyncResult:
         """
         Blocking method to wait for the result
         """
-        started_at = time.time()
-        while True:
-            if self.update or self.error:
-                if raise_exc and self.error:
-                    raise RuntimeError(f'Telegram error: {self.error_info}')
-                return
-            time.sleep(0.01)
-            if timeout and time.time() - started_at > timeout:
-                raise TimeoutError()
+        result = self._ready.wait(timeout=timeout)
+        if result is False:
+            raise TimeoutError()
+        if raise_exc and self.error:
+            raise RuntimeError(f'Telegram error: {self.error_info}')
 
     def parse_update(self, update: Dict[Any, Any]) -> None:
         if update.get('@type') == 'ok':
@@ -51,3 +48,5 @@ class AsyncResult:
             self.error_info = update
         else:
             self.update = update
+
+        self._ready.set()

Remove time.sleep from AsyncResult
diff --git a/tests/test_telegram_methods.py b/tests/test_telegram_methods.py
index ada7e9e..d66f8d2 100644
--- a/tests/test_telegram_methods.py
+++ b/tests/test_telegram_methods.py
@@ -301,6 +301,7 @@ class TestTelegram__login:
             result = AsyncResult(client=telegram)
 
             result.update = data
+            result._ready.set()
             result.id = request_id
 
             return result
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 51ea333..265ef86 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -68,12 +68,14 @@ class TestAsyncResult(object):
     def test_wait_with_update(self):
         ar = AsyncResult(client=None)
         ar.update = '123'
+        ar._ready.set()
         ar.wait(timeout=0.01)
 
     def test_wait_with_error_and_raise_exc(self):
         ar = AsyncResult(client=None)
         ar.error = True
         ar.error_info = 'some_error'
+        ar._ready.set()
         try:
             ar.wait(timeout=0.1, raise_exc=True)
             raised = False
@@ -86,4 +88,5 @@ class TestAsyncResult(object):
         ar = AsyncResult(client=None)
         ar.error = True
         ar.error_info = 'some_error'
+        ar._ready.set()
         ar.wait(timeout=0.01)

pip install -e .
parse_log_pytest
pytest
pytest flake8 pylint ipdb pytest-mock mypy
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
astroid==2.15.8
attrs @ file:///croot/attrs_1668696182826/work
backcall==0.2.0
certifi @ file:///croot/certifi_1671487769961/work/certifi
decorator==5.1.1
dill==0.3.7
flake8==5.0.4
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata==4.2.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
ipdb==0.13.13
ipython==7.34.0
isort==5.11.5
jedi==0.19.2
lazy-object-proxy==1.9.0
matplotlib-inline==0.1.6
mccabe==0.7.0
mypy==1.4.1
mypy-extensions==1.0.0
packaging @ file:///croot/packaging_1671697413597/work
parso==0.8.4
pexpect==4.9.0
pickleshare==0.7.5
platformdirs==4.0.0
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
prompt_toolkit==3.0.48
ptyprocess==0.7.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycodestyle==2.9.1
pyflakes==2.5.0
Pygments==2.17.2
pylint==2.17.7
pytest==7.1.2
pytest-mock==3.11.1
-e git+https://github.com/alexander-akhmetov/python-telegram.git@14f41c5d18db40a9d4cbed3a11981477d58ad44e#egg=python_telegram
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
tomlkit==0.12.5
traitlets==5.9.0
typed-ast==1.5.5
typing_extensions==4.7.1
wcwidth==0.2.13
wrapt==1.16.0
zipp @ file:///croot/zipp_1672387121353/work

name: python-telegram
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - astroid==2.15.8
      - backcall==0.2.0
      - decorator==5.1.1
      - dill==0.3.7
      - flake8==5.0.4
      - importlib-metadata==4.2.0
      - ipdb==0.13.13
      - ipython==7.34.0
      - isort==5.11.5
      - jedi==0.19.2
      - lazy-object-proxy==1.9.0
      - matplotlib-inline==0.1.6
      - mccabe==0.7.0
      - mypy==1.4.1
      - mypy-extensions==1.0.0
      - parso==0.8.4
      - pexpect==4.9.0
      - pickleshare==0.7.5
      - platformdirs==4.0.0
      - prompt-toolkit==3.0.48
      - ptyprocess==0.7.0
      - pycodestyle==2.9.1
      - pyflakes==2.5.0
      - pygments==2.17.2
      - pylint==2.17.7
      - pytest-mock==3.11.1
      - python-telegram==0.10.0
      - tomlkit==0.12.5
      - traitlets==5.9.0
      - typed-ast==1.5.5
      - typing-extensions==4.7.1
      - wcwidth==0.2.13
      - wrapt==1.16.0
prefix: /opt/conda/envs/python-telegram

tests/test_telegram_methods.py::TestTelegram__login::test_login_process_with_phone tests/test_utils.py::TestAsyncResult::test_wait_with_update tests/test_utils.py::TestAsyncResult::test_wait_with_error_and_raise_exc tests/test_utils.py::TestAsyncResult::test_wait_with_error_and_without_raise_exc
tests/test_telegram_methods.py::TestTelegram::test_phone_bot_token_init tests/test_telegram_methods.py::TestTelegram::test_send_message tests/test_telegram_methods.py::TestTelegram::test_send_phone_number_or_bot_token tests/test_telegram_methods.py::TestTelegram::test_send_bot_token tests/test_telegram_methods.py::TestTelegram::test_add_message_handler tests/test_telegram_methods.py::TestTelegram::test_add_update_handler tests/test_telegram_methods.py::TestTelegram::test_run_handlers tests/test_telegram_methods.py::TestTelegram::test_run_handlers_should_not_be_called_for_another_update_type tests/test_telegram_methods.py::TestTelegram::test_call_method tests/test_telegram_methods.py::TestTelegram::test_get_web_page_instant_view tests/test_telegram_methods.py::TestTelegram::test_get_me tests/test_telegram_methods.py::TestTelegram::test_get_chat tests/test_telegram_methods.py::TestTelegram::test_get_chats tests/test_telegram_methods.py::TestTelegram::test_get_chat_history tests/test_telegram_methods.py::TestTelegram::test_set_initial_params tests/test_telegram_methods.py::TestTelegram__update_async_result::test_update_async_result_returns_async_result_with_same_id tests/test_telegram_methods.py::TestTelegram__update_async_result::test_result_id_should_be_replaced_if_it_is_auth_process tests/test_telegram_methods.py::TestTelegram__login::test_login_process_should_do_nothing_if_already_authorized tests/test_utils.py::TestAsyncResult::test_initial_params tests/test_utils.py::TestAsyncResult::test_str tests/test_utils.py::TestAsyncResult::test_parse_update_with_error tests/test_utils.py::TestAsyncResult::test_parse_update_ok tests/test_utils.py::TestAsyncResult::test_parse_update tests/test_utils.py::TestAsyncResult::test_wait_with_timeout
telegram/utils.py telegram/client.py
telegram/utils.py telegram/client.py