Eine Select-Anweisung beim Schließen mehrerer Kanäle umgehen
Bei Verwendung der Select-Anweisung für die gleichzeitige Eingabeverarbeitung kann es wünschenswert sein, die Schleife zu verlassen wenn alle Eingangskanäle geschlossen sind. Das vorgestellte Code-Snippet versucht, einen Standardfall zu verwenden, um dieses Szenario zu bewältigen, reicht aber nicht aus, da es keine genaue Erkennung garantieren kann.
Eine effektivere Lösung besteht darin, geschlossene Kanäle innerhalb der Select-Anweisung auf Null zu setzen. Wenn ein Kanal geschlossen wird, wird ihm ein Nullwert zugewiesen, was bedeutet, dass er nicht mehr zur Auswahl berechtigt ist. Dieser Ansatz stellt sicher, dass die Schleife nur so lange fortgesetzt wird, wie aktive Kanäle vorhanden sind.
Im Wesentlichen sieht der geänderte Code wie folgt aus:
for { var x, ok = <-ch1 // Receive from ch1 fmt.Println("ch1", x, ok) if !ok { ch1 = nil // Nil closed channel } x, ok = <-ch2 // Receive from ch2 fmt.Println("ch2", x, ok) if !ok { ch2 = nil // Nil closed channel } if ch1 == nil && ch2 == nil { break // Exit loop when all channels are nil } }
Diese Lösung handhabt die Kanalschließungserkennung elegant ohne Leistungsbedenken mit sich zu bringen und eine präzise und effiziente Implementierung sicherzustellen. Wenn die Anzahl der Eingabekanäle zunimmt, bleibt der Niling-Ansatz unkompliziert und ist für die Verarbeitung mehrerer Eingaben skalierbar.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Select-Anweisung ordnungsgemäß beenden, wenn alle Kanäle geschlossen sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!