«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как можно использовать пакет `context` Go для тайм-аута горутин?

Как можно использовать пакет `context` Go для тайм-аута горутин?

Опубликовано 12 января 2025 г.
Просматривать:237

How Can Go\'s `context` Package Be Used to Timeout Goroutines?

Как Go обрабатывает таймаут горутин?

Вопрос:

Вы создаете инструмент, который обрабатывает несколько HTTP-вызовов в параллельных горутинах. Чтобы предотвратить сценарий неопределенного выполнения, вы ищете способ отмены горутин по истечении определенного периода времени.

Решение:

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

Чтобы решить эту проблему, рассмотрите возможность использования контекстного пакета в Go. Он предлагает эффективный способ обработки таймаутов и отмены контекста для горутин.

Фрагмент кода:

Вот пример использования контекстного пакета для управления таймаутом горутин:

package main

import (
    "context"
    "fmt"
    "time"
)

func test(ctx context.Context) {
    t := time.Now()

    select {
    case <-time.After(1 * time.Second):
        fmt.Println("overslept")
    case <-ctx.Done():
        fmt.Println("cancelled")
    }
    fmt.Println("used:", time.Since(t))
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)

    go test(ctx)

    // cancel context after 30 milliseconds
    time.Sleep(30 * time.Millisecond)
    cancel()
}

Этот код создает контекст с таймаутом 50 миллисекунд. Затем запускается горутина для выполнения тестовой функции с передачей контекста. В тестовой функции оператор select ожидает либо истечения тайм-аута, либо отмены контекста. Через 30 миллисекунд контекст отменяется, в результате чего горутина завершается и выводит сообщение «отменено».

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3