Sobes.tech
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()

Ин гуна, горутина ё худ ба охир мерасад, ё сигнали бекориро мегирад, агар ин пешбинӣ шуда бошад.