Sobes.tech
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í.