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-ი ვერ დარჩება უსასრულოდ და შეუძლია სწორად დასრულდეს.