Close
блоков при использовании в асинхронном сценарии.
Существует также BeginClose
/ EndClose
асинхронный вариант кода, если вы не хотите, чтобы ваш код вызова блокировался, но из того, что я вижу, если вы звоните .Close
, он будет ждать, пока ваши ожидающие вызовы не разрешатся до того, как .Close
вернется.
Также обратите внимание, что вызов его в обработчике Completed может вызвать проблемы с несколькими асинхронными вызовами к одному и тому же клиентскому объекту ... Я бы рекомендовал сделать это в коде вызова с .Close
или .BeginClose
Обновлено: Из документации (хотя и несколько похоронено)
Этот метод вызывает
ICommunicationObject для изящно
переход из открытого состояния в
Закрытое состояние. Метод Close
позволяет любую незаконченную работу
завершено до возвращения. (За
Например, закончить отправку любого буферизированного
сообщений.)
...
Закрытие возвращается после достижения закрытого состояния.