singleflight: example for using Group
Fixes golang/go#60208 Change-Id: I422a45c0f139ba47045f47cec1c96d300a2a424f Reviewed-on: https://go-review.googlesource.com/c/sync/+/496535 Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Bryan Mills <bcmills@google.com>
This commit is contained in:
parent
a6666c150e
commit
4966af63bb
1 changed files with 30 additions and 0 deletions
|
|
@ -327,3 +327,33 @@ func TestPanicDoSharedByDoChan(t *testing.T) {
|
|||
t.Errorf("Test subprocess failed, but the crash isn't caused by panicking in Do")
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleGroup() {
|
||||
g := new(Group)
|
||||
|
||||
block := make(chan struct{})
|
||||
res1c := g.DoChan("key", func() (interface{}, error) {
|
||||
<-block
|
||||
return "func 1", nil
|
||||
})
|
||||
res2c := g.DoChan("key", func() (interface{}, error) {
|
||||
<-block
|
||||
return "func 2", nil
|
||||
})
|
||||
close(block)
|
||||
|
||||
res1 := <-res1c
|
||||
res2 := <-res2c
|
||||
|
||||
// Results are shared by functions executed with duplicate keys.
|
||||
fmt.Println("Shared:", res2.Shared)
|
||||
// Only the first function is executed: it is registered and started with "key",
|
||||
// and doesn't complete before the second funtion is registered with a duplicate key.
|
||||
fmt.Println("Equal results:", res1.Val.(string) == res2.Val.(string))
|
||||
fmt.Println("Result:", res1.Val)
|
||||
|
||||
// Output:
|
||||
// Shared: true
|
||||
// Equal results: true
|
||||
// Result: func 1
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue