Erstellt C # AsyncCallback einen neuen Thread?

Ich habe ein geschriebenHttpListener welche lauscht an einem der Ports:

httpListener.BeginGetContext(new AsyncCallback(ListenerCallback), httpListener);

DasListenerCallback behandelt jede Anfrage, die auf dem Listener-URI eingeht. Wenn während der Verarbeitung der Anforderung eine Ausnahme auftritt, wird eine Diagnoseroutine ausgeführt, die versucht, den Listener uri zu treffen, um zu überprüfen, ob der Listener tatsächlich lebt und den Uri abhört, und das vom Listener zurückgegebene Antwortprotokoll schreibt. Listener gibt einfach einen String zurückListening... auf solche Dummy-Anfragen.

Jetzt kann ich während des Testens, wenn in anderen Modulen eine Ausnahme auftrat, die zur Ausführung der Diagnosemodule führte, den Listener zurückgeben sehenListening... richtig, wenn ich die Protokolle überprüft. Wenn jedoch eine Ausnahme in der aufgetreten istListenerCallbackBeim Versuch, den Listener-URI innerhalb der Diagnose zu treffen, wurde die folgende Ausnahme ausgelöst:

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

Diese Zeile 190 im Diagnosemodul lautet wie folgt:

189     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
190     HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Nun, wennAsyncCallback Sendet einen neuen Thread und starteListenerCallback in diesem neuen Thread darf es nicht resultierenOperation Timeout wenn die Dummy-Anforderung durch die Diagnose gesendet wird. Dies ist, was ich dachte, das gewünschte Verhalten sollte sein, da es ist*Async*Callback. In der Tat MSDN auchsagt das gleiche:

Verwenden Sie einen AsyncCallback-Delegaten, um die Ergebnisse eines asynchronen Vorgangs in einem separaten Thread zu verarbeiten.

Aber das scheint nicht der Fall zu sein. Vermisse ich hier etwas?

Visuelles Dolmetschen:

Antworten auf die Frage(3)

Ihre Antwort auf die Frage