Sobes.tech
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.Context ir 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.