После вызова Socket.Shutdown, Socket.Close и Socket.Disconnect, похоже, что Socket.ReceiveAsync не прерывается. Попытки повторно использовать объект SocketAsycEventArgs, используемый в вызове ReceiveAsync (предлагаемый в документации в качестве лучшей практики), приводят к ошибке:
Операция асинхронного сокета уже выполняется с использованием этого экземпляра SocketAsyncEventArgs
Что мне нужно сделать, чтобы получить ReceiveAsync, чтобы освободить его захват в этом экземпляре SocketAsyncEventArgs?
Изменить: я работал над этим, помещая ожидающий прием и не выполняя очистку до тех пор, пока не придет прием (i.e Completed отправлен). Но это не слишком хорошо. Не может ли он быть прерван, как API WebRequest?