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