Sobes.tech
Junior — Middle

რა განსხვავებაა WithTimeout ფუნქციის გამოყენებასა და WithDeadline-ის გამოყენებას შორის შესრულების დროის კონტროლის კონტექსტში?

sobes.tech AI

პასუხი AI-სგან

Go-ში WithTimeout და WithDeadline ფუნქციები გამოიყენება კონტექსტის შექმნისთვის დროის შეზღუდვით, მაგრამ განსხვავდებიან იმით, როგორ იძებნება ეს შეზღუდვა:

  • WithTimeout(parent, timeout) ქმნის კონტექსტს, რომელიც ავტომატურად გაუქმდება timeout დროის შემდეგ მიმდინარე მომენტიდან. ანუ, ტაიმერი იწყება გამოძახების დროს.

  • WithDeadline(parent, deadline) ქმნის კონტექსტს, რომელიც გაუქმდება კონკრეტულ დროს deadline (ტიპი time.Time). ეს საშუალებას აძლევს ზუსტად განსაზღვრო, როდის დასრულდება კონტექსტი.

მაგალითი:

ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 გაუქმდება 5 წამში ამჟამიდან

deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 გაუქმდება ზუსტად `deadline` დროს

ამიტომ, WithTimeout სასარგებლოა, როდესაც საჭიროა ხანგრძლივობის განსაზღვრა, ხოლო WithDeadline — როდესაც მნიშვნელოვანია კონკრეტული დრო.