Sobes.tech
Back to questions
Junior — Middle
84

Какова цель использования дочерних контекстов в системе?

Answer from AI

sobes.tech AI

В Go дочерние контексты (child contexts) создаются от родительских с помощью функций context.WithCancel, context.WithTimeout или context.WithDeadline. Цель использования дочерних контекстов:

  • Управление временем жизни операций: дочерний контекст можно отменить независимо от родительского, что позволяет контролировать выполнение конкретных задач.
  • Передача сигналов отмены: если родительский контекст отменяется, все дочерние тоже отменяются, обеспечивая каскадное завершение связанных операций.
  • Добавление ограничений: например, установка таймаута или дедлайна для дочернего контекста без изменения родительского.

Пример:

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
// ctx — дочерний контекст с таймаутом 5 секунд

go func(ctx context.Context) {
    select {
    case <-time.After(10 * time.Second):
        fmt.Println("Operation completed")
    case <-ctx.Done():
        fmt.Println("Operation cancelled or timed out")
    }
}(ctx)

// cancel() можно вызвать для отмены дочернего контекста вручную

Таким образом, дочерние контексты позволяют гибко управлять временем жизни и отменой операций в иерархии задач.