Senior
Jak přidat kontext do metody Stop, aby bylo možné přerušit čekání na provádění úkolů s časovým limitem?
sobes.tech AI
Odpověď od AI
Pro přidání kontextu do metody Stop, aby bylo možné přerušit čekání na dokončení úkolů s časovým limitem, je třeba použít context.Context ze standardní knihovny Go.
Příklad:
func (s *Service) Stop(ctx context.Context) error {
done := make(chan struct{})
go func() {
// Zde logika zastavení, čekání na dokončení úkolů
s.waitTasks() // blokující volání
close(done)
}()
select {
case <-done:
return nil // úspěšně dokončeno
case <-ctx.Done():
return ctx.Err() // přerušeno kvůli timeoutu nebo zrušení
}
}
Volání metody s timeoutem:
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
err := service.Stop(ctx)
if err != nil {
fmt.Println("Stop přerušeno:", err)
}
Tímto způsobem, pokud čekání na dokončení úkolů trvá déle než nastavený timeout, Stop se přeruší a vrátí chybu z kontextu. To umožňuje kontrolu doby čekání a správnou reakci na zrušení.