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 istListenerCallback
Beim 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: