func WithDeadline

func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc)

WithDeadline возвращает копию родительского контекста с deadline, не позднее d. Если deadline родительского объекта наступил раньше, чем d, WithDeadline(parent, d) семантически эквивалентен родительскому. Канал Done возвращенного контекста закрывается при deadline, при вызове функция отмены или когда канал Done родительского контекста закрыт, в зависимости от того, что произойдет раньше.

Отмена текущего контекста освобождает связанные с ним ресурсы, поэтому код должен вызывать cancel, как только операции исполняемые в этом Context выполнятся.

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

package main

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

func main() {
    d := time.Now().Add(50 * time.Millisecond)
    ctx, cancel := context.WithDeadline(context.Background(), d)

    // Несмотря на то, что ctx просрочен, 
    // хорошей практикой будет использовать вызов функции отмены в любом случае. 
    // Несоблюдение этого требования может привести к тому, 
    // что контекст и его родитель будут выполняться дольше, чем это необходимо.
    defer cancel()

    select {
    case <-time.After(1 * time.Second):
        fmt.Println("overslept")
    case <-ctx.Done():
        fmt.Println(ctx.Err())
    }

}

results matching ""

    No results matching ""