Да, вы делаете, но вы должны быть очень осторожны при этом. При закрытии всего, что реализует ICommunicationObject
, существует вероятность того, что утилизация объекта займет слишком много времени в случае ошибки или сбоя в канале.
Из-за этого предписано, что вы вызываете метод Close
, а затем вызываете метод Dispose
для IDisposable
, используя несколько перехватов для определенных типов исключений и вызывая Abort
прежде чем вы, наконец, позвоните Dispose
.
Вы можете заключить эту логику в реализацию IDisposable
, которую можно использовать в операторе using
.
Ключом здесь является создание токена, который реализует IDisposable
, а затем в этой реализации вызовите Close
, перехватите соответствующие исключения, вызовите Abort
(при необходимости) и затем вызовите Dispose
.
Это реализовано как метод расширения, который возвращает IDisposable
для него, что, в свою очередь, позволяет использовать его в операторе using
.