Я написал HttpListener
, который прослушивает один из портов:Создает ли C# AsyncCallback новый поток?
httpListener.BeginGetContext(new AsyncCallback(ListenerCallback), httpListener);
ListenerCallback
обрабатывает любой запрос, принимаемый на слушателя URI. Если исключение возникает во время запроса обработки, оно запускает процедуру диагностики, которая пытается атаковать прослушиватель uri, чтобы проверить, действительно ли слушатель жив и прослушивает uri, и записывает журнал ответа, возвращаемого слушателем. Слушатель просто возвращает строку Listening...
таким манекенам.
Теперь во время тестирования, когда в других модулях произошли исключения, в результате которых были выполнены диагностические модули, я мог видеть, что слушатель правильно ответил Listening...
, когда я проверил журналы. Однако, когда исключение произошло в ListenerCallback
, попытка поразить слушателя URI внутри диагностики бросил следующее исключение:
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
Эта строка 190 в диагностике модуля выглядит следующим образом:
189 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
190 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Теперь, если AsyncCallback
отправок новый поток и запустить ListenerCallback
в этом новом потоке, он не должен вызывать Operation Timeout
, когда запрос на фикцию отправляется через диагностику. Это то, что я думал о желаемом поведении, так как это *Async*Callback
. На самом деле MSDN также says the same:
Используйте AsyncCallback делегата для обработки результатов асинхронной операции в отдельном потоке.
Но, похоже, это не так. Я что-то упустил?
Интерпретация Визуально:
«фиктивный запрос отправлен через диагностику» не совсем ясен. Кажется, вы спрашиваете о своей собственной теории, и это может быть очень плохо. –
@HenkHolterman Я положил эту строку 190 диагностики, показывающую, как я отправляю запрос слушателю uri. – Mahesha999
Итак, разбитый слушатель останавливает прослушивание ... –