github.com/biogo/biogo@v1.0.4/concurrent/example_promisemap_test.go (about)

     1  // Copyright ©2011-2013 The bíogo Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package concurrent_test
     6  
     7  import (
     8  	"github.com/biogo/biogo/concurrent"
     9  
    10  	"fmt"
    11  	"time"
    12  )
    13  
    14  type SlowCounter []int
    15  
    16  func (c SlowCounter) Slice(i, j int) concurrent.Mapper { return c[i:j] }
    17  func (c SlowCounter) Len() int                         { return len(c) }
    18  
    19  func (c SlowCounter) Operation() (r interface{}, err error) {
    20  	var sum int
    21  	for _, v := range c {
    22  		sum += v
    23  		time.Sleep(1e8)
    24  	}
    25  	return sum, nil
    26  }
    27  
    28  func ExamplePromiseMap() {
    29  	c := SlowCounter{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    30  
    31  	p := concurrent.PromiseMap(c, 1, 2)
    32  	fmt.Println("Waiting...")
    33  	request1 := <-p.Wait()
    34  	if request1.Err != nil {
    35  		fmt.Println(request1.Err)
    36  	} else {
    37  		fmt.Println(request1.Value)
    38  	}
    39  	request2 := <-p.Wait()
    40  	if request2.Err != nil {
    41  		fmt.Println(request2.Err)
    42  	} else {
    43  		fmt.Println(request2.Value)
    44  	}
    45  
    46  	// Output:
    47  	// Waiting...
    48  	// [3 7 11 15 19]
    49  	// [3 7 11 15 19]
    50  }