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-ը չի սպասի անսահման և կարող է ճիշտ ավարտվել։