Оператор using () - это шаблон для удаления, предназначенный для повторного ознакомления с полезными привычками, но он не обязателен.Существует множество ситуаций, в которых вам нужно хранить объекты вне времени жизни функции с областью действия.
Хотя я думаю, что вам, вероятно, следует сконструировать таким образом, чтобы вы могли использовать оператор using (), важно, чтобыв некотором блокирующем блоке finally вы располагаете каждый из потоков.
Чтобы ответить на последний вопрос, не представляется, что у класса Stream есть какой-либо метод или свойство, позволяющее определить, был ли он закрыт / удален, однако еслишаблон IDisposable реализован правильно, вы можете снова вызвать Close / Dispose, если вам нужно быть уверенным.