Junior — Middle
Kako odrediti ko je inicirao otkazivanje trenutnog konteksta?
sobes.tech АИ
Одговор од АИ
У Go-у, није могуће директно одредити ко је иницирао отказ тренутног контекста, јер контекст не чува информације о иницијатору отказа.
Међутим, могуће је:
- Користити различите контексте са различитим изворима отказа (на пример,
context.WithCancel,context.WithTimeout,context.WithDeadline) како бисте разумели разлог отказа према типу контекста. - Преносити додатне информације кроз контекст помоћу
context.WithValue, како бисте идентификовали иницијатора.
Пример провере разлога отказа:
select {
case <-ctx.Done():
err := ctx.Err()
if err == context.Canceled {
fmt.Println("Ручно отказивање")
} else if err == context.DeadlineExceeded {
fmt.Println("Истекло време")
}
}
Да бисте прецизно одредили иницијатора отказа, потребно је имплементирати сопствени механизам за пренос тих информација.