This is a little ugly, IMO, as I would like to have the ability to leverage the using statement to close down gracefully.
However, I understand why you can't have it do both. In the end, I'll end up writing a structure which will call close properly if the CommunicationState value is not closed.
But, in order to do this, it would be nice if there was an Aborted value in the CommunicationState enumeration.
Yes, I agree it's a little ugly. We are considering adding an Aborted state in order to be explicit. Stay tuned.