Урок 108 · Задача 1

DoWithTimeout: таймаут на операцию

Выгрузка не должна ждать вечно. Реализуйте doWithTimeout(ctx, f, timeout) error: WithTimeout, запустить f в горутине, select по ctx.Done().

00:00:00
Показать решение
GolangРешение
func doWithTimeout(ctx context.Context, f func(), timeout time.Duration) error {
	ctx, cancel := context.WithTimeout(ctx, timeout)
	defer cancel()
	done := make(chan struct{})
	go func() {
		f()
		close(done)
	}()
	select {
	case <-done:
		return nil
	case <-ctx.Done():
		return ctx.Err()
	}
}
Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки