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") | 		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