Heim >Backend-Entwicklung >Golang >Wie kann man mehrere Go-Routinen mithilfe des Kontexts ordnungsgemäß beenden?
So synchronisieren Sie mehrere Go-Routinen mit Kontext
Um mehrere Goroutinen zu synchronisieren, sodass sie beendet werden können, wenn eine von ihnen zurückkehrt, bietet der Kontext eine Möglichkeit effektive Lösung.
Erklärung:
Der Beispielcode erstellt zwei Goroutinen. Um sie zu synchronisieren, wird ein context.Context initiiert und beiden Goroutinen bereitgestellt. Jede Goroutine tritt in eine Select-{}-Schleife ein und lauscht auf Nachrichten aus dem Kontext.
Wenn ein Fehler auftritt oder eine bestimmte Bedingung erfüllt ist:
Codebeispiel:
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() }
Vorteile der Verwendung von Kontext:
Das obige ist der detaillierte Inhalt vonWie kann man mehrere Go-Routinen mithilfe des Kontexts ordnungsgemäß beenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!