Sobes.tech
Junior — Middle

Hogyan lehet helyesen leállítani egy futó goroutine-t, ha szükséges, hogy külső jel vagy feltétel alapján fejeződjön be, még akkor is, ha az eredmény még nem érkezett meg?

sobes.tech MI

Válasz az MI-től

A futó goroutine helyes leállításához külső jel vagy feltétel alapján általában a context (context.Context) vagy csatornák használata javasolt az leállítási jel továbbítására Go nyelvben.

Példa a context használatával:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            // Leállítási jel érkezett, a goroutine befejezése
            return
        default:
            // Munka végrehajtása
        }
    }
}

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

    // Egy időpontban meghívjuk a cancel() függvényt a goroutine leállításához
    cancel()
}

Ez a megközelítés lehetővé teszi a goroutine számára, hogy rendszeresen ellenőrizze, nem érkezett-e leállási jel, és helyesen befejezze működését, még akkor is, ha az eredmény még nem érkezett meg. Hasonlóképpen, a leállási jel továbbítására használhatunk csatornát is, de a context idiomatikusabb és kényelmesebb módszer Go nyelvben.