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 tempotimeouta 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 specificodeadline(di tipotime.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.