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 — вақте ки вақти махсус муҳим аст.