Junior — Middle
Ar įmanoma situacija, kai gorutina bus nutraukta arba pati sustos?
sobes.tech AI
Atsakymas iš AI
Go kalba, gorutinos vykdymas gali būti savarankiškai nutrauktas keliais atvejais:
- Gorutina baigė savo funkciją. Kai funkcija, vykdyta gorutinoje, baigiasi, gorutina užsidaro.
- Panikas gorutinoje. Jei įvyksta panika gorutinoje ir ji nėra apdorota, ji netikėtai užbaigs darbą.
- Atšaukimas per kontekstą (context). Jei gorutina klausosi atšaukimo signalo per
context.Contextir jį gauna, ji gali būti teisingai užbaigta.
Svarbu suprasti, kad gorutinos nėra priverstinai nutraukiamos iš išorės — turite įgyvendinti patys sustabdymo mechanizmą, pavyzdžiui, per kanalus ar kontekstus.
Pavyzdys, kaip naudoti kontekstą gorutinos atšaukimui:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Gorutina baigta")
return
default:
// darbas
}
}
}(ctx)
// Kai kur, kviečiame cancel()
cancel()
Tokiu būdu, gorutina arba pati užbaigia darbą, arba, jei yra numatyta, gauna atšaukimo signalą ir užbaigia.