Sobes.tech
Junior — Middle

Xarici siqnal və ya şərtə əsasən, nəticə hələ alınmamış olsa belə, işləyən gorutini düzgün şəkildə necə dayandırmaq olar?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində işləyən gorutini xarici siqnal və ya şərt ilə düzgün şəkildə dayandırmaq üçün adətən kontekst (context.Context) və ya kanallar istifadə olunur və ləğv siqnalı ötürülür.

Kontekstdən istifadə nümunəsi:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            // Ləğv siqnalı alındı, gorutini yekunlaşdırırıq
            return
        default:
            // İş görürük
        }
    }
}

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

    // Bir müddətdən sonra, gorutini dayandırmaq üçün cancel() çağırırıq
    cancel()
}

Bu yanaşma gorutinin müntəzəm olaraq dayandırma siqnalı göndərilib-göndərilmədiyini yoxlamasına və düzgün şəkildə bağlanmasına imkan verir, hətta nəticə hələ alınmayıbsa belə. Eynilə, dayandırma siqnalını ötürmək üçün kanal da istifadə oluna bilər, lakin context Go-da daha idiomatika və rahat yoldur.