Почему бы не зарегистрироватьсяWaitForSingleObject? Вы можете использовать его для тайм-аута, а в обработчике вы можете вызвать request.Abort ().
Вот пример . Кстати, я использовал симальный подход, прежде чем я нашел эту статью в прошлом, и она работала как шарм.
ПРИМЕЧАНИЕ. Реальное завершение операции произойдет на следующем Stream.Read (только запрос / ответ был асинхронным) или Stream.EndRead (если чтение также асинхронное). Вам все еще нужно захватить исключение, которое выдается в обработчике EndXXXX.
РЕДАКТИРОВАТЬ: Если RegisterWaitForSingleObject никогда не вызывается, то у вас есть другая проблема, которая, скорее всего, ThreadPool не хватает свободных потоков. Обратный вызов для объекта RegisterWaitForSingle вызывается в потоке ThreadPool, и если в пуле нет свободного потока, он никогда не будет вызван. У вас есть несколько решений:
- Сделайте ваши страницы асинхронными. Почему ? Как .
- Изменение максимального потока в пуле .
В любом случае, увеличение размера пула вам не сильно поможет. Вы должны проверить свой код на предмет утечек ресурсов (потоков) и убедиться, что вы не только вызываете request.Abort (), но и закрываете ответ. Убедитесь, что в ваших обратных вызовах вы используете правильный метод EndXXX и т. Д.
я наздраве:)