Sobes.tech
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() и корректно завершает работу при отмене. Контекст не прерывает горутину принудительно, а сигнализирует о необходимости завершения.