Sobes.tech
Junior — Middle

Qual è la differenza tra l'uso della funzione WithTimeout e WithDeadline nel contesto del controllo del tempo di esecuzione?

sobes.tech AI

Risposta dell'AI

Le funzioni WithTimeout e WithDeadline in Go vengono utilizzate per creare un contesto con limite di tempo, ma differiscono nel modo in cui impostano questo limite:

  • WithTimeout(parent, timeout) crea un contesto che viene annullato automaticamente dopo un intervallo di tempo timeout a partire dal momento attuale. Quindi, il timer si avvia al momento della chiamata.

  • WithDeadline(parent, deadline) crea un contesto che viene annullato in un momento specifico deadline (di tipo time.Time). Questo permette di impostare un orario preciso in cui il contesto scadrà.

Esempio:

ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 si annullerà tra 5 secondi da ora

deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 si annullerà esattamente al momento di deadline

Pertanto, WithTimeout è utile quando si desidera impostare una durata, e WithDeadline quando si ha bisogno di un momento specifico nel tempo.