sql >> Base de Datos >  >> NoSQL >> Redis

Excepción de tiempo de espera después de comandos asíncronos y Task.WhenAny espera en StackExchange.Redis

Basado en una larga discusión en el chat y mucha investigación, parece que en algunos escenarios oscuros, el TPL está secuestrando el hilo del lector dedicado cuando estamos haciendo cosas como .TrySetResult (que:lo hacemos a menudo). Esto provoca un interbloqueo instantáneo si realiza una llamada síncrona, ya que no puede procesar ningún dato de socket si está ocupado esperando que se complete una tarea (que solo se completaría por sí mismo). De hecho, tenemos un código específicamente para evitar esto , pero parece que la solución en realidad fuerza que suceda en algunos otros escenarios. Lo cual... es horrible. Veré lo que puedo encontrar. Pero básicamente, el problema es que actualmente , en algunos escenarios limitados , TaskCompletionSource.TrySetResult está dando poder al TPL para ejecutar continuaciones sincrónicas. Esto incluye Task.WhenAny .