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 — როდესაც მნიშვნელოვანია კონკრეტული დრო.