Sobes.tech
Junior — Middle

Ինչպե՞ս կարելի է կանգնեցնել goroutine-ի կատարմանը, եթե սպասվող արժեքը դեռ չի հասել։

sobes.tech AI

Պատասխան AI-ից

Go լեզվում, որպեսզի կանգնեցնեք goroutine-ը, որը սպասում է արժեքի, բայց այդ արժեքը կարող է չգալ, սովորաբար օգտագործվում են ժամանակային սահմանափակությամբ ալիքներ կամ բովանդակային բովանդակություն՝ հետաձգման համար:

Օրինակ՝ select և time.After օգտագործելով ժամանակային սահմանափակություն՝

select {
case val := <-ch:
    // արժեքը ստացվել է, շարունակեք աշխատանքը
case <-time.After(time.Second * 5):
    // ժամանակային սահմանափակություն, կանգնեցրեք goroutine-ը
}

Մյուս տարբերակը՝ օգտագործել բովանդակային բովանդակություն (context.Context), որը կարելի է դադարեցնել արտաքինից՝

ctx, cancel := context.WithCancel(context.Background())

go func() {
    select {
    case val := <-ch:
        // մշակել val
    case <-ctx.Done():
        // կանգնեցրեք goroutine-ը
    }
}()

// ինչ-որ տեղ կոդում կանչեք cancel(), որպեսզի կանգնեցնեք goroutine-ը

Այսպիսով, goroutine-ը չի սպասի անսահման և կարող է ճիշտ ավարտվել։