You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
568 B
35 lines
568 B
package workpool |
|
|
|
import ( |
|
"fmt" |
|
"time" |
|
) |
|
|
|
// Task interface |
|
type Task interface { |
|
Run() *[]byte |
|
} |
|
|
|
// FutureTask out must be blocking chan (size=0) |
|
type FutureTask struct { |
|
T Task |
|
out chan *[]byte |
|
} |
|
|
|
// NewFutureTask . |
|
func NewFutureTask(t Task) *FutureTask { |
|
return &FutureTask{ |
|
T: t, |
|
out: make(chan *[]byte, 1), |
|
} |
|
} |
|
|
|
// Wait for task return until timeout |
|
func (ft *FutureTask) Wait(timeout time.Duration) (res *[]byte, err error) { |
|
select { |
|
case res = <-ft.out: |
|
case <-time.After(timeout): |
|
err = fmt.Errorf("task(%+v) timeout", ft) |
|
} |
|
return |
|
}
|
|
|