Junior — Middle
Go тилинде контекстти колдонуп goroutine'лердин иштешин туура токтотуу үчүн кандай жолдор бар?
sobes.tech AI
AIден жооп
Go тилде goroutine-дерди туура токтотуу үчүн көбүнчө context пакети колдонулат. Контекст түзүлөт, ал context.WithCancel аркылуу болочок менен токтотуу мүмкүнчүлүгү менен түзүлөт жана goroutineга өткөрүлөт. Горутина ичинде, контексттин абалы периоддук түрдө <-ctx.Done() аркылуу текшерилет. Эгер токтотуу функциясы чакырылса, Done() каналы жабылат жана goroutine туура аяктоого мүмкүнчүлүк алат.
Мисал:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine токтотулду")
return
default:
// ишти аткаруу
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// бир убакыттан кийин goroutine'ди токтотуу
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // goroutine аяктоо үчүн убакыт берүү
}
Бул ыкма goroutine-дерди коопсуз жана көзөмөлдөп токтотууга мүмкүндүк берет, коркунучтуу ыкмаларды колдонбостон.