Sobes.tech
Junior — Middle

Qual é a diferença entre o uso da função WithTimeout e WithDeadline no contexto do controlo do tempo de execução?

sobes.tech IA

Resposta da IA

As funções WithTimeout e WithDeadline em Go são usadas para criar um contexto com limite de tempo, mas diferem na forma de definir esse limite:

  • WithTimeout(parent, timeout) cria um contexto que é automaticamente cancelado após um período de tempo timeout a partir do momento atual. Ou seja, o temporizador inicia no momento da chamada.

  • WithDeadline(parent, deadline) cria um contexto que é cancelado em um momento específico deadline (tipo time.Time). Isso permite definir uma hora exata em que o contexto expirará.

Exemplo:

ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 será cancelado em 5 segundos a partir de agora

deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 será cancelado exatamente no momento do deadline

Portanto, WithTimeout é útil quando se deseja definir uma duração, e WithDeadline quando importa um momento específico no tempo.