問題:
您正在建立一個處理多個 HTTP 呼叫的工具在並發 goroutine 中。為了防止無限期執行的情況,您尋求一種在特定時間間隔後取消 goroutine 的方法。
解決方案:
同時創建goroutine 休眠的方法在指定的時間內發送廣播訊息來取消其他goroutine 似乎是合乎邏輯的,在這種情況下goroutine 的執行似乎有問題。
要解決此挑戰,請考慮利用 Go 中的 context 套件。它提供了一種有效的方法來處理 Goroutine 的逾時和上下文取消。
程式碼片段:
下面是一個使用context 套件進行Goroutine 超時管理的範例:
package main import ( "context" "fmt" "time" ) func test(ctx context.Context) { t := time.Now() select { case <-time.After(1 * time.Second): fmt.Println("overslept") case <-ctx.Done(): fmt.Println("cancelled") } fmt.Println("used:", time.Since(t)) } func main() { ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) go test(ctx) // cancel context after 30 milliseconds time.Sleep(30 * time.Millisecond) cancel() }
此程式碼建立一個逾時時間為50 毫秒的上下文。然後啟動一個 goroutine 來執行測試函數,並傳遞上下文。在測試函數中,選擇語句等待逾時發生或上下文被取消。 30 毫秒後,上下文被取消,導致 goroutine 完成並列印“cancelled”。
以上是Go 的 context 套件如何用於超時 Goroutine?的詳細內容。更多資訊請關注PHP中文網其他相關文章!