Junior — Middle
Ποια είναι η διαφορά στη χρήση της λειτουργίας WithTimeout σε σύγκριση με το WithDeadline στο πλαίσιο ελέγχου του χρόνου εκτέλεσης;
sobes.tech AI
Απάντηση από AI
Οι λειτουργίες WithTimeout και WithDeadline στο Go χρησιμοποιούνται για τη δημιουργία ενός πλαισίου με χρονικό περιορισμό, αλλά διαφέρουν στον τρόπο καθορισμού αυτού του περιορισμού:
-
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 όταν είναι σημαντική μια συγκεκριμένη στιγμή στο χρόνο.