Sobes.tech
Junior — Middle

¿En qué se diferencia el uso de la función WithTimeout de WithDeadline en el contexto del control del tiempo de ejecución?

sobes.tech AI

Respuesta de la IA

Las funciones WithTimeout y WithDeadline en Go se utilizan para crear un contexto con límite de tiempo, pero difieren en la forma de establecer ese límite:

  • WithTimeout(parent, timeout) crea un contexto que se cancela automáticamente después de un período de tiempo timeout desde el momento actual. Es decir, el temporizador comienza en el momento de la llamada.

  • WithDeadline(parent, deadline) crea un contexto que se cancela en un momento específico deadline (tipo time.Time). Esto permite establecer una hora exacta en la que el contexto expirará.

Ejemplo:

ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 se cancelará en 5 segundos desde ahora

deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 se cancelará exactamente en el momento de deadline

Por lo tanto, WithTimeout es útil cuando se desea establecer una duración, y WithDeadline cuando importa un momento específico en el tiempo.