Можно ли вызвать HttpListener.GetContext с таймаутом?

Согласно ссылке на HttpListener, вызов HttpListener.GetContext будет блокироваться, пока не получит HTTP-запрос от клиента.

Интересно, могу ли я указать таймаут, чтобы по истечении таймаута функция вернулась. Я думаю, что иначе это неразумно, так как нельзя гарантировать, что будет запрос на возврат этой функции, тогда как можно завершить этот вызов?

P.S. Я знаю, что есть асинхронная версия этого (BeginGetContext), но проблема остается, потому что соответствующий EndGetContext будет блокироваться, пока не придет HTTP запрос.

Так что в результате всегда будет один поток (если вы делаете это многопоточным) не может вернуться, потому что он заблокирован в ожидании запроса.

Я что-то упустил?

UPDATE:

Я нашел эту ссылку полезной. Я также обнаружил, что вызов HttpListener.Close() фактически завершает ожидающие потоки, созданные BeginGetContext()s. Каким-то образом HttpListener.Close() запускает обратные вызовы, зарегистрированные BeginGetContext(). Поэтому прежде чем выполнить HttpListener.EndGetContext(), проверьте, не остановился ли HttpListener.

9
задан Community 23 May 2017 в 12:33
поделиться