Timeout-Fall wird in GoroutineChannels nicht ausgeführt
In einem Codeausschnitt mit Goroutinen und Kanälen stößt ein Benutzer auf eine rätselhafte Situation, in der der Timeout-Fall auftritt Eine Select-Anweisung bleibt nicht ausgeführt.
Der bereitgestellte Code erstellt zwei Goroutinen, eine zum Senden sendet alle 1,5 Sekunden Werte an einen Kanal und ein anderer wartet auf Werte oder löst nach 2 Sekunden einen Timeout aus. Der Timeout-Fall tritt jedoch nie ein.
Warum wird dieses Verhalten beobachtet?
Der Schlüssel liegt in der wiederholten Erstellung des Timeout-Kanals in jeder Iteration der Auswahlschleife. Jedes Mal, wenn ein Wert vom c1-Kanal empfangen wird, wird von time.After() ein neuer Kanal generiert. Dieser neue Kanal erhält nach weiteren 2 Sekunden einen Wert, der vorherige Timeout-Kanal wird jedoch obsolet. Daher kann der Timeout-Fall niemals ausgeführt werden.
Um dieses Problem zu beheben und sicherzustellen, dass das Timeout wie erwartet auftritt, erstellen Sie den Timeout-Kanal nur einmal vor der Auswahlschleife. Dadurch bleibt der Kanal während der gesamten Programmausführung aktiv und der Timeout-Fall wird nach 2 Sekunden Inaktivität auf dem c1-Kanal ausgelöst.
Das obige ist der detaillierte Inhalt vonWarum wird mein Goroutine-Timeout-Fall bei der Verwendung von Kanälen nicht ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!