public void Dispose() { if (wasDisposed) { return; } DisposeResourcesWhoseDisposalCannotFail(); if (monitor != null) { monitor.Dispose(); } queueStorage.Dispose(); // only after we finish incoming recieves, and finish processing // active transactions can we mark it as disposed wasDisposed = true; }