Ну, самое главное, я не понимаю об чём спор. Если все блюдут контракт про повторные вызовы, в том числе и конкурентные, то написать свой не составляет никакого труда. Вот вчера писал перекладывалку из одного цсв в другой. Там два стрима.
public void Dispose() { this.stream1.Dispose(); this.stream2.Dispose(); }
Всё, у вас валидный диспоз, который можно вызывать последовательно дважды, параллельно и т.д.