Sobes.tech
Junior — Middle

შესაძლებელია თუ არა გორუტინის გაჩერება ან თვითონ შეჩერება?

sobes.tech AI

პასუხი AI-სგან

Go-ში, goroutine-ის შესრულება შეიძლება თვითონვე შეწყდეს რამდენიმე შემთხვევაში:

  • Goroutine-მა თავისი ფუნქცია დაასრულა. როგორც კი goroutine-ში დაწყებული ფუნქცია დასრულდება, goroutine-ი დახურება.
  • Panic goroutine-ის შიგნით. თუ goroutine-ში პანიკა ხდება და ის არ არის დამუშავებული, ის მოულოდნელად დასრულდება.
  • გაუქმება კონტექსტის (context) საშუალებით. თუ goroutine-ი უსმენს გაუქმების სიგნალს context.Context-ის საშუალებით და იღებს მას, ის სწორად დასრულდება.

მნიშვნელოვანია, რომ goroutine-ებს გარედან ძალით შეწყვეტა არ შეუძლიათ — თქვენ უნდა განახორციელოთ შეჩერების მექანიზმი თვითონ, მაგალითად, არხების ან კონტექსტების საშუალებით.

კონტექსტის გამოყენებით goroutine-ის გაუქმების მაგალითი:

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

go func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine დასრულდა")
            return
        default:
            // სამუშაო
        }
    }
}(ctx)

// გარკვეული მომენტში, ვიძახით cancel()
cancel()

ამ გზით, goroutine ან თავად დასრულდება სამუშაოს დასრულების შემდეგ, ან გაუქმების სიგნალს მიიღებს, თუ ეს გათვალისწინებულია.