首頁 >後端開發 >Golang >如何優雅地中斷正在執行的 Goroutine (*TCPListener).Accept()?

如何優雅地中斷正在執行的 Goroutine (*TCPListener).Accept()?

DDD
DDD原創
2024-11-03 16:53:03827瀏覽

How to Gracefully Interrupt a Goroutine Executing (*TCPListener).Accept()?

中斷Goroutine 執行(*TCPListener) Accept

當建立透過TCP 連線回應客戶端的伺服器時,go-routine通常用於使用(*TCPListener).Accept() 處理傳入連線。問題是如何乾淨地關閉伺服器併中斷在此呼叫中阻塞的 goroutine。

(*TCPListener).Accept() 的文件指出它等待下一個連線並傳回一個通用的Conn。但是,它提供了有關如何中斷此阻塞操作的有限資訊。

解決方案在於使用 (TCPListener).Close(),它會關閉偵聽器並導致 goroutine 執行 (TCPListener).Accept() 回傳。這允許伺服器正常關閉併中斷 go-routine。然後 go-routine 應該從呼叫中返回並允許伺服器乾淨地退出。

以上是如何優雅地中斷正在執行的 Goroutine (*TCPListener).Accept()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn