Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Timeout-Ausnahme nach asynchronen Befehlen und Task.WhenAny erwartet in StackExchange.Redis

Basierend auf einer langen Diskussion im Chat und viel Graben sieht es so aus, als würde die TPL in einigen obskuren Szenarien den dedizierten Leser-Thread entführen, wenn wir Dinge wie .TrySetResult tun (was:tun wir oft). Dies führt zu einem sofortigen Deadlock, wenn Sie einen synchronen Aufruf tätigen, da es möglicherweise keine Socket-Daten verarbeiten kann, wenn es damit beschäftigt ist, auf den Abschluss einer Aufgabe zu warten (die immer nur von ihm selbst abgeschlossen würde). Wir haben tatsächlich einen Code speziell, um dies zu verhindern , aber es sieht so aus, als ob die Problemumgehung tatsächlich erzwingt es in einigen anderen Szenarien passieren. Was ... schrecklich ist. Ich werde sehen, was ich finden kann. Aber im Grunde ist das Problem, dass derzeit , in einigen begrenzten Szenarien , TaskCompletionSource.TrySetResult gibt der TPL die Macht, synchrone Fortsetzungen auszuführen. Dazu gehört Task.WhenAny .