Pregunta

Aquí están mis suposiciones básicas:

  1. Wcf ejecuta mis métodos de operación de servicio en subprocesos IOCP (UnsafeQueueNativeOverlapped) en lugar de subprocesos ThreadPool normales (QueueUserWorkItem).

  2. El bloqueo de E / S no se debe no dentro de los métodos de operación de servicio unidireccional.

  3. El bloqueo de E / S no se debe no dentro de un hilo de ThreadPool normal.

Creo que la mejor estrategia es encadenar llamadas asíncronas . Por lo tanto, si recibo un mensaje en mi operación de servicio unidireccional, hago una llamada asíncrona a mi db y, cuando finalice, hago mi próxima llamada dyn asíncrona, etc. y finalmente respondo a través de mi devolución de llamada wcf ...

Sin embargo, es difícil hacer cada llamada de base de datos asíncrona. He recurrido a romper las reglas 2 y 3 anteriores, pero no me gusta porque creo que esto acabará con el ThreadPool. ¿Hay mejores estrategias?

He estudiado el uso de CustomThreadPool de Jon Skeet, pero tampoco estoy seguro de que esa sea la respuesta.

¿Fue útil?

Solución

Sugeriría romper la regla 3 poniendo en cola las llamadas de E / S síncronas para que ThreadPool las realice. Los métodos de servicio siguen regresando de inmediato, pero el trabajo se realiza en segundo plano eventualmente, tal vez iniciando una notificación de devolución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top