Senior
WithCancel, WithTimeout va WithDeadline ning foydalanish misollarini keltira olasizmi?
sobes.tech AI
AIdan javob
Go paketidagi context da, bekor qilish va bajarilish vaqtini cheklash imkoniyatiga ega bo'lgan kontekstlar yaratish uchun funksiyalar mavjud:
-
WithCancel — bu kontekstni qo'lda cancel() funksiyasini chaqirish orqali bekor qilish mumkin. Bu, voqea yuz berganda operatsiyani to'xtatish uchun ishlatiladi.
-
WithTimeout — bu kontekst, belgilangan vaqt o'tgach avtomatik ravishda bekor qilinadi.
-
WithDeadline — bu kontekst, aniq bir vaqtda bekor qilinadi.
Misollar:
ctx, cancel := context.WithCancel(context.Background())
// 2 sekunddan so'ng kontekstni bekor qiladigan gorutina ishga tushiramiz
//
go func() {
time.Sleep(2 * time.Second)
cancel()
}()
select {
case <-ctx.Done():
fmt.Println("Operatsiya bekor qilindi")
}
// WithTimeout
ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelTimeout()
// 3 sekunddan so'ng bekor qilinadigan operatsiya
// WithDeadline
deadline := time.Now().Add(5 * time.Second)
ctxDeadline, cancelDeadline := context.WithDeadline(context.Background(), deadline)
defer cancelDeadline()
// belgilangan vaqtda bekor qilinadigan operatsiya
Ushbu mexanizmlar so'rovlarning bajarilish vaqtini nazorat qilish, uzoq davom etadigan operatsiyalarni bekor qilish va resurslarni boshqarish uchun foydalidir.