github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/util/do.go (about)

     1  package util
     2  
     3  import "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
     4  
     5  func ContextDo(ctx context.Context, f func() error) error {
     6  
     7  	ch := make(chan error)
     8  
     9  	go func() {
    10  		select {
    11  		case <-ctx.Done():
    12  		case ch <- f():
    13  		}
    14  	}()
    15  	select {
    16  	case <-ctx.Done():
    17  		return ctx.Err()
    18  	case val := <-ch:
    19  		return val
    20  	}
    21  	return nil
    22  }