Tengo una aplicación web ASP.NET MVC que realiza llamadas al servicio web de estilo REST a otros servidores. Tengo un escenario en el que hago dos llamadas HttpWebRequest a dos servicios separados. Necesito que ambos completen para continuar, pero su orden no importa. Pueden tomar 1-2 segundos cada uno y los estoy ejecutando en secuencia ahora. Ejecutarlos en paralelo disminuiría el tiempo de respuesta del usuario, pero ¿cuál es la mejor manera?Recomendaciones para ejecutar .NET HttpWebRequests en paralelo en ASP.NET
En la investigación de esto, puedo pensar en varias opciones:
- ejecutar una solicitud en el hilo principal, y hacer girar un segundo hilo de la otra petición. ¿Debería crear nuevos hilos o usar un grupo de hilos? Si utilizo un grupo, ¿cómo lo dimensiono? Además, no estoy seguro de cómo puedo unir los hilos nuevamente (por ejemplo, use ThreadPool.RegisterWaitForSingleObject)?
- Pruebe y aproveche el soporte integrado IAsyncResult para una o ambas solicitudes. De nuevo, no estoy seguro de qué subprocesos ejecutar la solicitud asincrónica, por lo que no estoy seguro de cómo dimensionar el grupo de subprocesos. ¿Cómo vuelvo a unir IAsyncResult a mi hilo principal? Todos los ejemplos encuentro información de proceso en la devolución de llamada, pero puedo esperar en mi hilo principal y usar la propiedad IsCompleted.
Necesito encontrar una solución que funcione y funcione a escala. Es por eso que estoy preocupado por el tamaño del grupo de subprocesos. No me gustaría tener bloqueos de solicitudes porque están esperando los hilos disponibles.
Hmmm, creo que el spin-wait que tiene en el pseudo-código (while (true)) solo es adecuado para tiempos de espera muy cortos. Creo que querrías usar algún tipo de semáforo en su lugar. – Mike
Dijo que se trataba de la aplicación ASP.NET MVC, por lo que supongo que los tiempos de espera serían, en general, bastante cortos. Cuando dices semáforo, no estoy seguro de a qué contexto te refieres, ya que un semáforo funcionaría exactamente como un bloqueo de giro (sin tiempo de CPU que pueda remediarse en el código rápido anterior) y aún requiera un ciclo similar al anterior para liberar el bloqueo ya que estamos tratando con múltiples hilos. – GrayWizardx