Junior — Middle
Jak lze určit, kdo inicioval zrušení aktuálního kontextu?
sobes.tech AI
Odpověď od AI
V Go není možné přímo určit, kdo inicioval zrušení aktuálního kontextu, protože kontext neuchovává informace o iniciátorovi zrušení.
Nicméně, lze:
- Použít různé kontexty s různými zdroji zrušení (například
context.WithCancel,context.WithTimeout,context.WithDeadline) pro pochopení příčiny zrušení podle typu kontextu. - Přenášet dodatečné informace přes kontext pomocí
context.WithValue, aby bylo možné identifikovat iniciátora.
Příklad kontroly příčiny zrušení:
select {
case <-ctx.Done():
err := ctx.Err()
if err == context.Canceled {
fmt.Println("Ruční zrušení")
} else if err == context.DeadlineExceeded {
fmt.Println("Vypršel časový limit")
}
}
Pro přesné určení iniciátora zrušení je třeba implementovat vlastní mechanismus přenosu této informace.