Senior
Puteți oferi exemple de utilizare a WithCancel, WithTimeout și WithDeadline?
sobes.tech AI
Răspuns de la AI
În pachetul context din Go, există funcții pentru crearea de contexte cu posibilitatea de anulare și limitare a timpului de execuție:
-
WithCancel — creează un context care poate fi anulat manual apelând funcția cancel(). Este utilizat atunci când trebuie să întrerupeți o operație la un eveniment.
-
WithTimeout — creează un context care se anulează automat după un interval de timp specificat.
-
WithDeadline — creează un context care se anulează la un moment specific.
Exemple:
ctx, cancel := context.WithCancel(context.Background())
// Începem o gorutină care va anula contextul după 2 secunde
go func() {
time.Sleep(2 * time.Second)
cancel()
}()
select {
case <-ctx.Done():
fmt.Println("Operație anulată")
}
// WithTimeout
ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelTimeout()
// operație care se va întrerupe după 3 secunde
// WithDeadline
deadline := time.Now().Add(5 * time.Second)
ctxDeadline, cancelDeadline := context.WithDeadline(context.Background(), deadline)
defer cancelDeadline()
// operație care se va întrerupe la timpul stabilit
Aceste mecanisme sunt utile pentru controlul timpului de execuție al solicitărilor, anularea operațiilor lungi și gestionarea resurselor.