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