小编Gre*_*ble的帖子

我可以强制终止goroutine而不等待它返回吗?

让我举一个例子:

func WaitForStringOrTimeout() (string, error) {
  my_channel := make(chan string)
  go WaitForString(my_channel)

  select {
  case found_string := <-my_channel:
    return found_string, nil
  case  <-time.After(15 * time.Minute):
    return nil, errors.New("Timed out waiting for string")
  }
}
Run Code Online (Sandbox Code Playgroud)

在这个简单的例子中,我有一些函数WaitForString,它会阻塞一段时间并最终返回一个字符串.我想用这个代码包装WaitForString,该代码返回相同的字符串或超时并带有错误.

如果快速找到一个字符串,是否还有一个goroutine在某处运行15分钟的睡眠声明,或者这个垃圾是以某种方式收集的?

如果发生超时并且从未找到字符串,那么仍然存在运行WaitForString的goroutine,即使没有其他例程可以观察它的输出吗?如果WaitForString分配了大量内存但从不返回怎么办?

有没有什么方法可以让WaitForString()意识到超时发生并放弃?

concurrency select garbage-collection go goroutine

5
推荐指数
1
解决办法
786
查看次数

标签 统计

concurrency ×1

garbage-collection ×1

go ×1

goroutine ×1

select ×1