Sobes.tech
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 өзү иш аяктагандан кийин же токтотуу сигналын алгандан кийин аяктайт, эгер ал каралган болсо.