簡體   English   中英

在Go中取消阻止操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM