Контекст

Контекст позволяет посылать сигнал отмены асинхронному процессу/программе go-routine.
контекст

Методы, предоставляемые интерфейсом контекста:-

Value(key) Этот метод возвращает значение, связанное с указанным ключом.

**Done() **Этот метод возвращает канал, который может быть использован для получения уведомления об отмене.

Deadline() Этот метод возвращает Time, представляющий крайний срок выполнения запроса, и значение bool, которое будет равно false, если крайний срок не был указан.

Err() Этот метод возвращает ошибку, которая указывает, почему канал Done получил сигнал. Пакет context определяет две переменные, которые могут быть использованы для сравнения ошибки: Canceled указывает, что запрос был отменен, а DeadlineExeeded указывает, что срок истек.

Функции https://pkg.go.dev/context#pkg-functions

  • Background()
  • WithCancel(ctx)
  • WithDeadline(ctx,time)
  • WithTimeout(ctx,duration)
  • WithValue(ctx, key, val)
package main

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

func processRequest(ctx context.Context, wg *sync.WaitGroup, count int) {
    total := 0
    for i := 0; i < count; i++ {
        select {
        case <-ctx.Done():
            fmt.Println("Stopping processing - request cancelled")
            goto end
        default:
            fmt.Printf("Processing request: %v n", total)
            total++
            time.Sleep(time.Millisecond * 250)
        }
    }
    fmt.Println("%v Request processed...", total)
end:
    wg.Done()
}
func main() {
    waitGroup := sync.WaitGroup{}
    waitGroup.Add(1)
    fmt.Println("Request dispatched...")
    ctx, cancel := context.WithCancel(context.Background())

    go processRequest(ctx, &waitGroup, 10)
    time.Sleep(time.Second)
    fmt.Println("Canceling req")
        cancel()
    waitGroup.Wait()

}

---

% go run contxt.go
Request dispatched...
Processing request: 0 
Processing request: 1 
Processing request: 2 
Processing request: 3 
Canceling request
Stopping processing - request cancelled
Вход в полноэкранный режим Выход из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий