首頁 > 後端開發 > Golang > Go 的 context 套件如何用於超時 Goroutine?

Go 的 context 套件如何用於超時 Goroutine?

Susan Sarandon
發布: 2024-11-20 04:36:02
原創
816 人瀏覽過

How Can Go's `context` Package Be Used to Timeout Goroutines?

Go 如何處理超時 Goroutines?

問題:

您正在建立一個處理多個 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板