首頁 >後端開發 >Golang >如何使用上下文優雅地終止多個 Go 例程?

如何使用上下文優雅地終止多個 Go 例程?

Susan Sarandon
Susan Sarandon原創
2024-12-10 05:48:14136瀏覽

How to Gracefully Terminate Multiple Go Routines Using Context?

如何使用 Context 同步多個 Go 例程

為了同步多個 goroutine,允許它們在其中一個返回時終止,context提供了一個有效的

說明:

範例程式碼建立了兩個 goroutine。為了同步它們,將啟動 context.Context 並將其提供給兩個 goroutine。每個 goroutine 都會進入一個 select {} 循環,監聽來自上下文的訊息。

當發生錯誤或滿足特定條件時:

  1. main goroutine 呼叫與上下文相關的取消函數。
  2. 這會向
  3. 所有偵聽上下文的 goroutine 都會收到此訊息並終止。

程式碼範例:

package main

import (
    "context"
    "sync"
)

func main() {

    ctx, cancel := context.WithCancel(context.Background())
    wg := sync.WaitGroup{}
    wg.Add(3)
    go func() {
        defer wg.Done()
        for {
            select {
            // msg from other goroutine finish
            case <-ctx.Done():
                // end
            }
        }
    }()

    go func() {
        defer wg.Done()
        for {
            select {
            // msg from other goroutine finish
            case <-ctx.Done():
                // end
            }
        }
    }()

    go func() {
        defer wg.Done()
        // your operation
        // call cancel when this goroutine ends
        cancel()
    }()
    wg.Wait()
}

使用優點範例:

  • 使用優點
  • 使用優點
  • 使用優點
使用優點 避免需要明確同步機制,保持程式碼整潔。 錯誤處理: 如果一個goroutine發生錯誤,它可以透過優雅終止: Goroutine 收到訊號後儘快終止,防止潛在的內存洩漏。

以上是如何使用上下文優雅地終止多個 Go 例程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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