Sobes.tech
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 όταν είναι σημαντική μια συγκεκριμένη στιγμή στο χρόνο.