Brechen Sie eine Blockierungsoperation in Go @ a

Ich habe eine Blockierungsoperation in einer Bibliothek eines Drittanbieters, die ich nicht kontrolliere. Es könnte möglicherweise für immer gehen. Also möchte ich eine Zeitüberschreitung festlegen. Der naheliegende Weg ist, ihn mit einem Kanal und einer Goroutine zu umhüllen und dann das Ergebnis mit @ auszuwähletime.After. Das Problem ist jedoch, dass die Goroutine, auf der die Blockierungsoperation ausgeführt wird, möglicherweise für immer ausfallen kann.

Hier ist ein Beispiel, um dies zu veranschaulichenhttp: //repl.it/90

Gibt es eine Möglichkeit, eine Goroutine zu stornieren oder Müll zu sammeln?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage