Sobes.tech
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ēc timeout laika 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 (tipa time.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.