Junior — Middle
Hogyan lehet megállítani egy goroutine végrehajtását egy adott idő elteltével, ha nem érkezett eredmény?
sobes.tech MI
Válasz az MI-től
Go nyelvben a gorutina végrehajtásának leállításához egy adott idő elteltével általában select-et használunk időzítővel vagy időkorlátos kontextussal.
Példa time.After-rel:
select {
case result := <-ch:
// eredmény feldolgozása
case <-time.After(2 * time.Second):
// időtúllépés — az eredményt nem kaptuk meg 2 másodpercen belül
}
Példa kontextussal:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case result := <-ch:
// eredmény feldolgozása
case <-ctx.Done():
// időtúllépés vagy leállítás
}
Így, ha az eredmény nem érkezik meg időben, a végrehajtást megszakíthatjuk és kezelhetjük az időtúllépést.