Junior — Middle
Kāda ir atšķirība starp WithTimeout un WithDeadline funkciju izmantošanu izpildes laika kontroles kontekstā?
sobes.tech AI
Atbilde no AI
Go valodā funkcijas WithTimeout un WithDeadline izmanto, lai izveidotu kontekstu ar laika ierobežojumu, taču tās atšķiras pēc veida, kā tiek noteikts šis ierobežojums:
-
WithTimeout(parent, timeout)izveido kontekstu, kas automātiski tiek atcelts pēctimeoutlaika no šī brīža. Tas nozīmē, ka taimeris sāk darboties uzreiz pēc izsaukšanas. -
WithDeadline(parent, deadline)izveido kontekstu, kas tiek atcelts tieši noteiktā laikādeadline(tipatime.Time). Tas ļauj precīzi noteikt, kad konteksts beigsies.
Piemērs:
ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 tiks atcelts pēc 5 sekundēm no šī brīža
deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 tiks atcelts tieši `deadline` laikā
Tādēļ WithTimeout ir ērti, ja nepieciešams noteikt ilgumu, bet WithDeadline — ja svarīgs ir konkrēts laiks.