Ответ 1
Каков наилучший способ использования новых методов Async для Socket, TcpClient или TcpListener для создания масштабируемого сервера на С#?
На Socket
нет новых методов async
; методы с именем *Async
on Socket
являются специальным набором API для уменьшения использования памяти. TcpClient
и TcpListener
получили некоторые новые методы async
.
Если вам нужна лучшая масштабируемость, вы, вероятно, лучше всего используете пользовательские ожидания Stephen Toub для Socket
. Если вам нужен самый простой код, вам, вероятно, лучше использовать TcpClient
и TcpListener
.
Влияют ли новые методы Async на порты завершения ввода/вывода?
Да, как и большинство других асинхронных API в BCL. AFAIK, класс Stream
является единственным, который может не использовать IOCP; все остальные методы *Begin
/*End
/*Async
используют IOCP.
Повышает эффективность вашего собственного Socket-прослушивателя или класс TcpListener/TcpClient довольно хорош сейчас?
Классы довольно хороши, как и они. Стивен Тууб имеет сообщение в блоге, которое немного более эффективно с точки зрения использования памяти.