Senior
20
Можно ли ограничить время работы горутины с помощью контекста?
Companies where asked
.wrk
Answer from AI
sobes.tech AI
Да, в Go можно ограничить время работы горутины с помощью контекста (context.Context).
Контекст позволяет задать таймаут или дедлайн, после которого операции, использующие этот контекст, будут отменены.
Пример:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
go func(ctx context.Context) {
select {
case <-time.After(5 * time.Second):
fmt.Println("Горутина завершилась")
case <-ctx.Done():
fmt.Println("Горутина отменена по таймауту")
}
}(ctx)
В этом примере горутина завершится либо по истечении 5 секунд, либо раньше, если контекст отменится через 2 секунды.
Важно, чтобы внутри горутины была логика, которая слушает канал ctx.Done() и корректно завершает работу при отмене. Контекст не прерывает горутину принудительно, а сигнализирует о необходимости завершения.