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