Agrupación de conexiones de base de datos con servicio de subprocesos múltiples

Tengo un servicio .NET 4 C # que utiliza las bibliotecas TPL para subprocesos. Recientemente lo cambiamos para usar también la agrupación de conexiones, ya que una conexión se estaba convirtiendo en un cuello de botella para el procesamiento.

Anteriormente, estábamos usando una cláusula de bloqueo para controlar la seguridad de la rosca en el objeto de conexión. A medida que el trabajo se respaldaría, la cola existiría como tareas y muchos subprocesos (tareas) estarían esperando la cláusula de bloqueo. Ahora, en la mayoría de los escenarios, los hilos esperan en la base de datos IO y los procesos de trabajo MUCHO más rápido.

Sin embargo, ahora que estoy usando la agrupación de conexiones, tenemos un nuevo problema. Una vez que se alcanza el número máximo de conexiones (100 por defecto), si se solicitan más conexiones, hay un tiempo de espera (consulte Información de agrupación). Cuando esto sucede, se produce una excepción que dice "Se agotó el tiempo de espera de la solicitud de conexión".

Todos mis IDisposables están dentro de las declaraciones de uso, y estoy administrando adecuadamente mis conexiones. Este escenario ocurre debido a que se solicita más trabajo del que el grupo puede procesar (lo que se espera). Entiendo por qué se lanza esta excepción, y conozco formas de manejarla. Un simple reintento se siente como un truco. También me doy cuenta de que puedo aumentar el tiempo de espera a través de la cadena de conexión, sin embargo, no parece una solución sólida. En el diseño anterior (sin agrupación), los elementos de trabajo se procesarían debido al bloqueo dentro de la aplicación.

¿Cuál es una buena forma de manejar este escenario para garantizar que todo el trabajo se procese?

Respuestas a la pregunta(6)

Su respuesta a la pregunta