一尘不染

在Go中取消阻止操作

go

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

这是一个示例来说明此http://repl.it/90o

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


阅读 298

收藏
2020-07-02

共1个答案

一尘不染

您无法从“外部”停止goroutine。goroutine必须支持某种终止信令(通常是信道)。但是,如果不这样做,您将无法强制执行或杀死它。

如果您对正在使用的第三方库无能为力,那么您最多可以做的就是在一个可以杀死的不同进程(在由go应用启动的另一个应用程序中)中运行它,但这仅仅是丑陋又太笨重。

2020-07-02