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