I have a blocking operation in a 3rd party library that I don't control. It could potentially go forever. So I want to set a timeout on it. The obvious way is to wrap it with a channel and a goroutine and then select on the result with time.After
. However, the problem is the goroutine running the blocking operation could potentially go forever.
Here is an example to illustrate this http://repl.it/90o
Is there a way to cancel a goroutine or have it garbage collected?