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