В чем разница между 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 значительно сложнее реализовать и получить небольшой выигрыш для чего угодно, кроме услуг уровня предприятия.

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