Я пишу сервер и должен иметь возможность отправлять сообщение всем подключенным клиентам.Когда будет отправлен SendAsync?
Я пытаюсь решить, должен ли я создавать SocketAsyncEventArgs для каждого подключенного сокета и отправлять все пакеты одновременно.
Другим подходом было бы использование одного SocketAsyncEventArgs и отправка пакетов один за другим. Тогда было бы заманчиво вызывать SendAsync в методе ProcessSend (который вызывается, когда SendAsync завершен) и иметь очередь подключенных сокетов. Но что, если по какой-то причине SendAsync не завершится за разумное время? Есть ли какой-нибудь сценарий, который бы никогда не завершился?
Да, я знаю, что метод всегда возвращается немедленно. Но если время до того, как вызывается обработчик события Completed, может быть длинным, тогда было бы небезопасно иметь очередь отправки и повторно использовать те же SocketAsyncEventArgs. – remdao
Это может занять много времени (дольше обычного, в любом случае), если есть перегрузка сети; или если это протокол потока гарантированного доставки, я думаю, что это может занять много времени, если приемник медленно считывает предыдущие данные (чтобы сетевые буферы соединения были полными и контролировались потоком). – ChrisW
@remdao: Вы должны предположить, что SendAsync может занимать больше времени, чем вы хотели бы, и соответствующим образом кодировать. Почти в каждом случае ваше полное событие произойдет очень быстро, но вы не можете рассчитывать на это. –