Sobes.tech
Junior — Middle

Go-da kontekst istifadə edərək goroutine-lərin düzgün şəkildə dayandırılması necə mümkündür?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində goroutine-ləri düzgün şəkildə dayandırmaq üçün tez-tez context paketindən istifadə olunur. İstənilən vaxt ləğv edilə bilən kontekst (context.WithCancel) yaradılır və goroutine-ə ötürülür. Goroutine daxilində, kontekstin vəziyyəti mütəmadi olaraq <-ctx.Done() vasitəsilə yoxlanılır. Ləğv funksiyası çağırıldıqda, Done() kanalı bağlanır və goroutine düzgün şəkildə sona çatdırılır.

Nümunə:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine dayandırıldı")
            return
        default:
            // iş yerinə yetirilir
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    go worker(ctx)

    // bir müddət sonra goroutine-ı dayandırırıq
    time.Sleep(time.Second)
    cancel()
    time.Sleep(time.Millisecond * 100) // goroutine-in bitməsinə imkan verir
}

Bu yanaşma, goroutine-ləri təhlükəsiz və nəzarətli şəkildə dayandırmağa imkan verir, təhlükəsiz olmayan metodlardan istifadə etmədən.