【发布时间】:2018-03-21 08:03:17
【问题描述】:
假设我有一个 golang 函数,类似于:
conn, _ := ln.Accept()
r := bufio.NewReader(conn)
func waiter(r *bufio.Reader) {
r.ReadString('\n')
}
go waiter(r)
time.Sleep(time.Second)
fmt.Println("hello")
有没有办法让我取消服务员,这样它就不会挂起等待字符串输入,如果它永远不会出现?问题是 bufio 阅读器被阻塞了,我想让它在股票代码上等待两秒钟,如果它没有将任何数据读入缓冲区以逃避 goroutine。
【问题讨论】:
-
一般情况下你不能取消一个 goroutine,但是在这里你可以简单地关闭连接来中断 Read 调用。你能举一个你实际试图解决的问题的例子吗?
-
你总是可以设置一个定时器向上调用,并在处理程序中发送一个 EOF 信号。
-
如果你只想等待一定的时间,你应该在连接上设置一个读取期限。
-
也许这对你有帮助:rakyll.org/leakingctx
标签: go