Согласно ссылке на HttpListener, вызов HttpListener.GetContext будет блокироваться, пока не получит HTTP-запрос от клиента.
Интересно, могу ли я указать таймаут, чтобы по истечении таймаута функция вернулась. Я думаю, что иначе это неразумно, так как нельзя гарантировать, что будет запрос на возврат этой функции, тогда как можно завершить этот вызов?
P.S. Я знаю, что есть асинхронная версия этого (BeginGetContext), но проблема остается, потому что соответствующий EndGetContext будет блокироваться, пока не придет HTTP запрос.
Так что в результате всегда будет один поток (если вы делаете это многопоточным) не может вернуться, потому что он заблокирован в ожидании запроса.
Я что-то упустил?
UPDATE:
Я нашел эту ссылку полезной. Я также обнаружил, что вызов HttpListener.Close() фактически завершает ожидающие потоки, созданные BeginGetContext()s. Каким-то образом HttpListener.Close() запускает обратные вызовы, зарегистрированные BeginGetContext(). Поэтому прежде чем выполнить HttpListener.EndGetContext(), проверьте, не остановился ли HttpListener.