---
name: retry_async
kind: function
lang: py
domain: core
version: "1.0.0"
purity: impure
signature: "async def retry_async(func: Callable[[], Awaitable[T]], max_retries: int, base_delay: float = 0.5, max_delay: float = 8.0, jitter: bool = True, is_retryable: Callable[[Exception], bool] | None = None) -> T"
description: "Version async de retry_sync. Reintenta una corrutina en errores transitorios con exponential backoff. Usa asyncio.sleep en vez de time.sleep."
tags: [retry, backoff, exponential, async, resilience, api, asyncio, pendiente-usar]
uses_functions: [classify_api_error_py_core, compute_backoff_delay_py_core]
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [asyncio, typing]
params:
  - name: func
    desc: "Corrutina a reintentar"
  - name: max_retries
    desc: "Número máximo de reintentos"
  - name: base_delay
    desc: "Delay inicial en segundos"
  - name: max_delay
    desc: "Delay máximo en segundos"
  - name: jitter
    desc: "Si True, añade variabilidad al delay"
  - name: is_retryable
    desc: "Predicado opcional para decidir si reintentar una excepción"
output: "Resultado de ejecutar la función si tiene éxito"
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/core/retry_async.py"
---

## Ejemplo

```python
import httpx

async def fetch():
    async with httpx.AsyncClient() as client:
        return await client.get("https://api.example.com/data")

# Reintentar hasta 3 veces con backoff
response = await retry_async(func=fetch, max_retries=3)

# Con predicado personalizado
result = await retry_async(
    func=my_async_db_query,
    max_retries=5,
    is_retryable=lambda e: "deadlock" in str(e),
)
```

## Notas

Version async de retry_sync: usa `asyncio.sleep` en lugar de `time.sleep`, permitiendo que el event loop atienda otras tareas durante la espera. El comportamiento de clasificacion y backoff es identico a retry_sync.
