chore: move retry async check to wrap time (#649)

* chore: move retry async check to wrap time

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* added no cover mark

---------

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
Co-authored-by: Anthonios Partheniou <partheniou@google.com>
diff --git a/google/api_core/retry/retry_unary.py b/google/api_core/retry/retry_unary.py
index ab1b403..0904313 100644
--- a/google/api_core/retry/retry_unary.py
+++ b/google/api_core/retry/retry_unary.py
@@ -141,10 +141,7 @@
 
     for sleep in sleep_generator:
         try:
-            result = target()
-            if inspect.isawaitable(result):
-                warnings.warn(_ASYNC_RETRY_WARNING)
-            return result
+            return target()
 
         # pylint: disable=broad-except
         # This function explicitly must deal with broad exceptions.
@@ -280,6 +277,8 @@
             Callable: A callable that will invoke ``func`` with retry
                 behavior.
         """
+        if inspect.iscoroutinefunction(func):
+            warnings.warn(_ASYNC_RETRY_WARNING)
         if self._on_error is not None:
             on_error = self._on_error
 
diff --git a/tests/unit/retry/test_retry_unary.py b/tests/unit/retry/test_retry_unary.py
index 7dcd8dd..71f6e24 100644
--- a/tests/unit/retry/test_retry_unary.py
+++ b/tests/unit/retry/test_retry_unary.py
@@ -101,14 +101,20 @@
 )
 @pytest.mark.asyncio
 async def test_retry_target_warning_for_retry(utcnow, sleep):
-    predicate = retry.if_exception_type(ValueError)
-    target = mock.AsyncMock(spec=["__call__"])
+    """
+    retry.Retry should raise warning when wrapping an async function.
+    """
+
+    async def target():
+        pass  # pragma: NO COVER
+
+    retry_obj = retry.Retry()
 
     with pytest.warns(Warning) as exc_info:
-        # Note: predicate is just a filler and doesn't affect the test
-        retry.retry_target(target, predicate, range(10), None)
+        # raise warning when wrapping an async function
+        retry_obj(target)
 
-    assert len(exc_info) == 2
+    assert len(exc_info) == 1
     assert str(exc_info[0].message) == retry.retry_unary._ASYNC_RETRY_WARNING
     sleep.assert_not_called()