如何在 Go 中讓 Goroutines 超時來控制執行時間
Goroutines 是 Go 並發的一個組成部分,允許非同步執行任務。但是,有時,有必要控制這些例程的持續時間並防止它們無限期地執行。
背景與問題
在負載測試工具中,您想要在指定時間後終止 goroutine 以限制 HTTP 呼叫過程的持續時間。目前在 goroutine 中使用 time.Sleep() 的方法建立了一個通訊通道,但會導致 goroutine 過早終止。
使用Context 的解決方案
更多建議的方法涉及利用golang.org/x/net/context 套件(Go 1.7 的標準庫中提供),特別是context.Context 介面。 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("used:", time.Since(t)) } func main() { ctx, _ := context.WithTimeout(context.Background(), 50*time.Millisecond) test(ctx) }
在此程式碼中:
以上是如何在 Go 中優雅地超時 Goroutine?的詳細內容。更多資訊請關注PHP中文網其他相關文章!