В чем разница между BeginConnect и ConnectAsync?

В чем разница между BeginConnect и ConnectAsync ? Впоследствии, в чем разница между BeginDisconnect и DisconnectAsync ?

Документация ConnectAsync гласит:

«Начинает asynchronous запрос для подключения удаленного хоста».

Документация BeginConnect также гласит:

«Начинает asynchronous запрос для подключения удаленного хоста».

Оба DisconnectAsync и BeginDisconnect также BeginDisconnect и то же:

«Начинает asynchronous запрос на отсоединение от удаленной конечной точки».

В чем разница между этими парами методов и какой из них следует использовать?

Socket.ConnectAsync предоставляет SocketAsyncEventArgs в качестве параметров, который содержит намного больше информации по сравнению с 3 параметрами, предоставляемыми BeginConnect. Также я знаю, что ConnectAsync представлен позже, чем BeginConnect, и решает некоторые проблемы, связанные с таймаутами (не могу вспомнить источник этой дискуссии сейчас). Предпочитайте ConnectAsync, когда это возможно (хотя для этого требуется минимум .NET 2.0 SP1).

Существует обратная связь с ConnectAsync о обратных вызовах. Если это вызывает озабоченность, обсудим это: переполнение стека при использовании System.Net.Sockets.Socket.AcceptAsync и AsyncCallBack CompletedSynchronously

В Silverlight нет поддержки метода BeginConnect (поддерживается только ConnectAsync), так что это может быть еще одна проблема, если вы собираетесь разрабатывать приложения Silverlight на стороне клиента.

Также шаблоны, используемые в двух подходах, различны. Вот обсуждение: есть ли разница в производительности между Begin * и * Async для сокетов в .NET?

Были введены методы XXXXAsync, поскольку они уменьшают количество операций с памятью, возникающее, когда серверы имеют множество подключенных клиентов. В сочетании с объединением, описанным в документах , использование этого API значительно снижает объем работы GC, который должен выполняться по сравнению с более старым API BeginXXX.

Документы говорят следующее :

Главной особенностью этих улучшений является предотrotation повторного выделения и синхронизации объектов при высокопроизводительных асинхронных вводах-выводах. Шаблон проектирования Begin / End, который в настоящее время реализуется classом System.Net.Sockets.Socket, требует, чтобы для каждой операции асинхронного сокета был назначен объект System.IAsyncResult.

Итак, если вы не пишете сервер для многих тысяч подключенных клиентов, я бы не стал беспокоиться о XXXXAsync. API значительно сложнее реализовать и получить небольшой выигрыш для чего угодно, кроме услуг уровня предприятия.

Interesting Posts

Преобразование int в 4-байтовый массив символов (C)

Угловое – использование труб в услугах и компонентах

Каковы различия между XmlSerializer и BinaryFormatter

Использование CapsLock для переключения раскладки клавиатуры

Должен ли я устанавливать 64-разрядные версии операционных систем?

Можете ли вы сделать настройки в Настройках. По умолчанию, даже если вы не открываете приложение «Настройки»

Программно получить скриншот страницы

Как скопировать столбец с условным форматом «значение» – Libreoffice 4.1

Как проверить, является ли какое-либо значение NaN в Pandas DataFrame

Правильный способ изменения MAC-адреса в виртуальной машине Linux?

Log4net катит ежедневное имя файла с датой в имени файла

Отключить прокрутку UIScrollView, когда UITextField становится первым ответчиком

Общий доступ для разбивки списка на пакет

Компиляция с -static-libgcc -static-libstdc ++ по-прежнему приводит к динамической зависимости от libc.so

Получить каталог приложений

Давайте будем гением компьютера.