并发编程中的超时处理

在并发编程中,要放弃运行时间太长的同步调用,请使用带有time.After的select语句,如下:

import (
	"errors"
	"fmt"
	"time"
)

func main() {
	var timeoutNanoseconds time.Duration = 5 * time.Second
	c := make(chan error, 1)
	go func() {
		time.Sleep(20 * time.Second)
		c <- errors.New("error")
	} ()
	select {
	case err := <-c:
		// use err and reply
		fmt.Println(err)
	case <-time.After(timeoutNanoseconds):
		// call timed out
		fmt.Println("timeout...")
	}
}

以上代码在超时5秒后退出