Здравствуйте, Murom, Вы писали:
N>>В MSDN есть замечательный пример получения кода html страницы, но к сожалению в этом примере производится блокирование до тех пор, пока не будет принята вся страница. Если не сложно помогите пожалуйста переделать его под асинхронные сокеты, буду премного благодарен за помощь.
M>Всю работу с синхронным сокетом в отдельный поток, и асинхронное взаимодействие с потоком сокета.
Синхронная работа с сокетом в новом потоке — это совсем не тоже самое, что и использование асинхронного API этого сокета. Разница заключается в эффективности и потреблении ресурсов. При использовании нативных асинхронных операций будут использованы соответствующие механизмы ОС, типа портов завершения или других механизмов асинхронного взаимодействия уровня ОС, что *значительно* более эффективно, по сравнению с ручным созданием потока и работы из него.
Простой пример (только с сервером, а не с клиентом): если мы для каждого входного соединения будем создавать новый поток, то на каждое новое подключение будет тратиться как минимум 1Мб памяти, при этом обработка данных также будет производиться в новом потоке. Но одновременно в сотне потоков обрабатывать данные очень не эффективно при наличии 4-х физических процессоров. Используя же асинхронный API класса TcpListener количеством активных потоков будет управлять порт ввода-вывода, который обеспечит максимальную эффективность обработки в зависимости от количества и загрузки текущих аппаратных ресурсов.
Примеры асинхронной работы:
TcpClient.BeginConnect и
Socket.BeginReceive