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՝ երբ կարևոր է կոնկրետ ժամանակը։