1package backoff
2
3import (
4	"context"
5	"log"
6)
7
8func ExampleRetry() {
9	// An operation that may fail.
10	operation := func() error {
11		return nil // or an error
12	}
13
14	err := Retry(operation, NewExponentialBackOff())
15	if err != nil {
16		// Handle error.
17		return
18	}
19
20	// Operation is successful.
21}
22
23func ExampleRetryContext() {
24	// A context
25	ctx := context.Background()
26
27	// An operation that may fail.
28	operation := func() error {
29		return nil // or an error
30	}
31
32	b := WithContext(NewExponentialBackOff(), ctx)
33
34	err := Retry(operation, b)
35	if err != nil {
36		// Handle error.
37		return
38	}
39
40	// Operation is successful.
41}
42
43func ExampleTicker() {
44	// An operation that may fail.
45	operation := func() error {
46		return nil // or an error
47	}
48
49	ticker := NewTicker(NewExponentialBackOff())
50
51	var err error
52
53	// Ticks will continue to arrive when the previous operation is still running,
54	// so operations that take a while to fail could run in quick succession.
55	for _ = range ticker.C {
56		if err = operation(); err != nil {
57			log.Println(err, "will retry...")
58			continue
59		}
60
61		ticker.Stop()
62		break
63	}
64
65	if err != nil {
66		// Operation has failed.
67		return
68	}
69
70	// Operation is successful.
71	return
72}
73