Senior
Tudna példákat adni a WithCancel, WithTimeout és WithDeadline használatára?
sobes.tech MI
Válasz az MI-től
A Go nyelv context csomagjában vannak olyan függvények, amelyek lehetővé teszik kontextusok létrehozását, amelyek leállíthatók és időkorlátokkal rendelkeznek:
-
WithCancel — létrehoz egy olyan kontextust, amely manuálisan leállítható a cancel() függvény hívásával. Akkor használjuk, amikor egy műveletet esemény hatására kell megszakítani.
-
WithTimeout — létrehoz egy olyan kontextust, amely automatikusan leáll, miután egy megadott időtartamot eltelt.
-
WithDeadline — létrehoz egy olyan kontextust, amely egy adott időpontban leáll.
Példák:
ctx, cancel := context.WithCancel(context.Background())
// Indítunk egy goroutine-t, amely 2 másodperc múlva leállítja a kontextust
//
go func() {
time.Sleep(2 * time.Second)
cancel()
}()
select {
case <-ctx.Done():
fmt.Println("Művelet megszakítva")
}
// WithTimeout
ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelTimeout()
// művelet, amely 3 másodperc múlva megszakad
// WithDeadline
deadline := time.Now().Add(5 * time.Second)
ctxDeadline, cancelDeadline := context.WithDeadline(context.Background(), deadline)
defer cancelDeadline()
// művelet, amely a megadott időpontban szakad meg
Ezek a mechanizmusok hasznosak a kérések futási idejének ellenőrzésében, hosszú műveletek megszakításában és erőforrások kezelésében.