在Go中取消阻止操作

时间:2015-01-30 16:18:08

标签: go timeout blocking goroutine

我在第三方库中进行阻止操作,但我无法控制。它可能会永远消失。所以我想设置一个超时。显而易见的方法是用通道和goroutine包装它,然后使用time.After选择结果。然而,问题是运行阻塞操作的goroutine可能会永远存在。

以下是一个说明此http://repl.it/90o

的示例

有没有办法取消goroutine或收集垃圾?

2 个答案:

答案 0 :(得分:4)

你不能阻止“外面”的goroutine。 goroutine必须支持某种终止信令(通常是一个信道)。但如果没有,你就不能强迫它或杀死它。

如果你无法对你正在使用的第三方库做任何事情,你可以做的最多就是在不同的过程(在你的应用程序启动的不同应用程序中)运行它,你可以杀死它,但是这只是丑陋而且过于繁琐。

答案 1 :(得分:0)

我认为你无能为力。在Go,你不能从外面阻止goroutine。如果您无法修复此库并且您认为它可以永久阻止,那么请编写一个您可以控制的新库。