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 ან თავად დასრულდება სამუშაოს დასრულების შემდეგ, ან გაუქმების სიგნალს მიიღებს, თუ ეს გათვალისწინებულია.