Sobes.tech
Junior — Middle

Jaki jest cel używania kontekstów podrzędnych w systemie?

sobes.tech AI

Odpowiedź od AI

W języku Go konteksty potomne (child contexts) są tworzone z kontekstów nadrzędnych za pomocą funkcji context.WithCancel, context.WithTimeout lub context.WithDeadline. Cel używania kontekstów potomnych:

  • Zarządzanie czasem życia operacji: kontekst potomny może być odwołany niezależnie od nadrzędnego, co pozwala kontrolować wykonanie konkretnych zadań.
  • Przekazywanie sygnałów anulowania: jeśli kontekst nadrzędny zostanie anulowany, wszystkie konteksty potomne również zostaną, zapewniając kaskadowe zakończenie powiązanych operacji.
  • Dodanie ograniczeń: na przykład ustawienie limitu czasu lub terminu dla kontekstu potomnego bez zmiany nadrzędnego.

Przykład:

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
// ctx — kontekst potomny z limitem czasu 5 sekund

go func(ctx context.Context) {
    select {
    case <-time.After(10 * time.Second):
        fmt.Println("Operacja zakończona")
    case <-ctx.Done():
        fmt.Println("Operacja anulowana lub przekroczony limit czasu")
    }
}(ctx)

// cancel() można wywołać, aby ręcznie anulować kontekst potomny

W ten sposób konteksty potomne pozwalają elastycznie zarządzać czasem życia i anulowaniem operacji w hierarchii zadań.