Sobes.tech
Junior — Middle

Чӣ гуна метавон кафолат дод, ки ҳама гурутиҳои дар барнома оғозшуда ба анҷом расанд?

sobes.tech AI

Ҷавоб аз AI

Дар забони Go, роҳи дохилӣ барои қатъ кардани маҷбурии goroutine аз берун вуҷуд надорад. Барои таъмини он, ки ҳамаи goroutine-ҳои дар ҳозир фаъол дар охир ба анҷом расанд, одатан аз ҳамоҳангсозии sync.WaitGroup истифода мешавад.

Принсипи кор:

  • Пеш аз оғоз кардани ҳар goroutine, wg.Add(1) фаро хонда мешавад.
  • Дар охири goroutine, wg.Done() фаро хонда мешавад.
  • Дар функсияи асосӣ, wg.Wait() фаро хонда мешавад, ки иҷрои барномаро мепӯшонад, то он даме, ки ҳисобкунӣ ба сифр нарасад.

Масалан:

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // кори goroutine
}()

wg.Wait() // интизор шавед, то ҳама goroutine-ҳо ба охир расанд

Бо ин роҳ, барнома кафолат медиҳад, ки интизор мешавад, то ҳама goroutine-ҳо ба охир расанд, пеш аз идома ё анҷом додан.