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()