[英]cancel a blocking operation in Go
我在我無法控制的第三方庫中進行了阻止操作。 它有可能永遠消失。 所以我想設置一個超時時間。 最明顯的方法是用一個通道和一個goroutine包裝它,然后用time.After
選擇結果。 但是,問題是運行阻塞操作的goroutine可能永遠消失。
這是一個示例來說明此http://repl.it/90o
有沒有辦法取消goroutine或將其收集為垃圾?
您無法從“外部”停止goroutine。 goroutine必須支持某種終止信令(通常是信道)。 但是,如果不這樣做,您將無法強制執行或殺死它。
如果您對正在使用的第三方庫無能為力,那么您最大可能要做的就是在一個可以殺死的不同進程(在由go應用啟動的另一個應用程序中)中運行它,但這僅僅是丑陋又太笨重。
我認為您無能為力。 在Go中,您無法從外部停止goroutine。 如果您無法修復該庫,並且認為它可能永遠受阻,請編寫一個您可以控制的新庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.