Junior — Middle
Чӣ гуна метавон goroutine-ро, ки дар ҳоли иҷро аст, дуруст боздошт, агар зарур бошад, ки он дар асоси сигнали хориҷӣ ё шарте анҷом ёбад, ҳатто агар натиҷа ҳанӯз гирифта нашуда бошад?
sobes.tech AI
Ҷавоб аз AI
Барои боздошти дурусти goroutine, ки дар Go кор мекунад, тавассути сигнали беруна ё шароит, одатан истифода мешавад контекст (context.Context) ё каналҳо барои интиқоли сигнали бекоркунӣ.
Масалан бо истифодаи контекст:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Сигнали бекоркунӣ гирифта шуд, goroutine-ро ба охир мерасонем
return
default:
// Корро иҷро мекунем
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// Дар як лаҳза, мо cancel()-ро барои боздошти goroutine-ро даъват мекунем
cancel()
}
Ин усул имкон медиҳад, ки goroutine мунтазам санҷад, ки оё сигнали боздошти фиристода шудааст ва ба дурустӣ ба охир расад, ҳатто агар натиҷа ҳанӯз гирифта нашуда бошад. Ҳамчунин, метавонад канал барои интиқоли сигнали боздошти истифода шавад, аммо context роҳи идиоматикӣ ва қулайтар дар Go мебошад.