为了账号安全,请及时绑定邮箱和手机立即绑定

取消 Go 中的阻塞操作

取消 Go 中的阻塞操作

Go
FFIVE 2021-09-13 14:51:01
我在我无法控制的第 3 方库中有一个阻塞操作。它可能会永远消失。所以我想设置一个超时时间。显而易见的方法是用一个通道和一个 goroutine 包装它,然后用time.After. 然而,问题是运行阻塞操作的 goroutine 可能会永远运行下去。这是一个例子来说明这个http://repl.it/90o有没有办法取消一个 goroutine 或者让它垃圾收集?
查看完整描述

2 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

您无法从“外部”停止 goroutine。goroutine 必须支持某种终止信号(通常是通道)。但如果它没有,你不能强迫它或杀死它。

如果你不能对你正在使用的 3rd 方库做任何事情,你最多可以做的是在不同的进程中运行它(在你的 go 应用程序启动的不同应用程序中),你可以杀死它,但这只是又丑又麻烦。


查看完整回答
反对 回复 2021-09-13
?
倚天杖

TA贡献1828条经验 获得超3个赞

我不认为你可以做任何事情。在 Go 中,您无法从外部停止 goroutine。如果你不能修复这个库并且你认为它会永远阻塞,那么写一个你可以控制的新库。


查看完整回答
反对 回复 2021-09-13
  • 2 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信