Sobes.tech
Junior — Middle

Hogyan tudja a goroutine, hogy a kontextuson keresztül érkezett a befejezési jelzés?

sobes.tech MI

Válasz az MI-től

A goroutine a befejezési jelet a kontextuson keresztül kapja meg egy csatornán, amely az context.Context objektumot biztosítja. Általában a Done() metódust használják, amely egy csatornát ad vissza, ami bezárul, amikor a kontextus törlésre kerül. A goroutine figyelheti ezt a csatornát egy ciklusban vagy select-ben, és reagálhat a bezárására, ami a művelet befejezésének vagy törlésének jelzése.

Példa:

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

go func() {
    select {
    case <-ctx.Done():
        // A kontextus törölve lett, befejezzük
        fmt.Println("Goroutine befejeződött")
        return
    // más esetek
    }
}()

// később meghívjuk a cancel() függvényt a befejezés jelzésére
cancel()