¿C # AsyncCallback crea un nuevo hilo?
He escrito unHttpListener
que escucha en uno de los puertos:
httpListener.BeginGetContext(new AsyncCallback(ListenerCallback), httpListener);
losListenerCallback
maneja cualquier solicitud que se reciba en el uri del oyente. Si se produce una excepción durante la solicitud de manejo, ejecuta una rutina de diagnóstico, que intenta golpear el uri del oyente solo para comprobar si el oyente está realmente vivo y escuchando en el uri y escribe el registro de respuestas devuelto por el oyente. El oyente simplemente devuelve la cadenaListening...
a tales solicitudes ficticias.
Ahora, durante la prueba, cuando se produjo una excepción en otros módulos que dieron como resultado la ejecución de los módulos de diagnóstico, puedo ver que el oyente ha regresadoListening...
correctamente cuando he comprobado los registros. Sin embargo, cuando se produjo la excepción en elListenerCallback
, el intento de golpear el URI del oyente dentro de los diagnósticos arrojó la siguiente excepción:
System.Net.WebException : The operation has timed out
at System.Net.HttpWebRequest.GetResponse()
at MyPackage.Diagnostics.hitListenerUrl(String url) in c:\SW\MyApp\MyProj\Diagnostics.cs:line 190
Esa línea 190 en el módulo de diagnóstico es la siguiente:
189 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
190 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Ahora siAsyncCallback
despacha nuevo hilo y correListenerCallback
en ese nuevo hilo, no debe resultarOperation Timeout
cuando la solicitud ficticia se envía a través de los diagnósticos. Esto es lo que pensé que debería ser el comportamiento deseado ya que es*Async*Callback
. De hecho MSDN tambiéndice lo mismo:
Use un delegado de AsyncCallback para procesar los resultados de una operación asincrónica en un hilo separado.
Pero parece que ese no es el caso. ¿Me estoy perdiendo de algo?
Interpretación visual: