В чем разница между BeginConnect и ConnectAsync?
в чем разница между BeginConnect
и ConnectAsync
? Следовательно, в чем разница между BeginDisconnect
и DisconnectAsync
?
на ConnectAsync
в документации указано:
" начинается асинхронный запрос на подключение удаленного хоста."
на BeginConnect
документация и гласит:
" начинается асинхронный запрос удаленного хоста соединение."
и DisconnectAsync
и BeginDisconnect
также заявить то же самое:
" начинается асинхронный запрос на отключение от удаленной конечной точки."
в чем разница между этими парами методов и какой из них следует использовать?
2 ответов
гнездо.ConnectAsync предоставляет SocketAsyncEventArgs как параметры, которые содержат гораздо больше информации по сравнению с 3 парами, предоставленными BeginConnect. Также я знаю, что ConnectAsync введен позже, чем BeginConnect и решает некоторые проблемы, связанные с тайм-аутами (не могу вспомнить источник этого обсуждения сейчас). Предпочитайте ConnectAsync, когда это возможно (хотя для этого требуется min .NET 2.0 SP1).
существует уловка с ConnectAsync о обратных вызовах. Если это вызывает беспокойство, вот дискуссии об этом: переполнение стека при использовании системы.Сеть.Розетки.Розетка.AcceptAsync model и AsyncCallBack CompletedSynchronously
в Silverlight нет поддержки метода BeginConnect (поддерживается только ConnectAsync), поэтому это может быть другой проблемой, если вы собираетесь разрабатывать приложения Silverlight на стороне клиента.
также шаблоны, используемые в двух подходах, различны. Вот обсуждение:есть ли разница в производительности между Begin* и * Async для сокетов в .NET?
методы XXXXAsync были введены, потому что они уменьшают объем обмолота памяти, который происходит, когда серверы имеют много подключенных клиентов. В сочетании с описано объединение в документы, использование этого API значительно уменьшает объем работы, которую должен выполнить GC по сравнению со старым API BeginXXX.
на документы говорят следующее:
главная особенность этих улучшений избегание повторное выделение и синхронизация объектов во время высокообъемного асинхронного ввода-вывода сокета.шаблон проектирования Begin/End, реализуемый в настоящее время системой.Сеть.Розетки.Класс сокета требует системы.Объект IAsyncResult будет выделен для каждой операции асинхронного сокета.
Итак, если вы не пишете сервер для многих тысяч подключенных клиентов, я бы не стал беспокоиться о XXXXAsync. API значительно сложнее реализовать и мало что выигрывает от чего-либо, кроме услуги корпоративного уровня.