gpt4 book ai didi

go - 取消 go func()

转载 作者:IT王子 更新时间:2023-10-29 02:32:14 25 4
gpt4 key购买 nike

假设我有一个类似于以下内容的 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。

最佳答案

Conn接口(interface)提供了一个方法SetReadDeadline来在特定的时间中断过时的操作:

for {
// Set a deadline for reading. Read operation will fail if no data
// is received after deadline.
conn.SetReadDeadline(time.Now().Add(timeoutDuration))

// Read tokens delimited by newline
bytes, err := bufReader.ReadBytes('\n')
if err != nil {
fmt.Println(err)
return
}

fmt.Printf("%s", bytes)
}

http://www.mrleong.net/post/130329994134/go-tcp-connection-listening-and-timeout

关于go - 取消 go func(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46657841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com