Sobes.tech
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.