IDisposable объявляет детерминированное освобождение ресурсов; using/await using гарантирует Dispose.
Разбор
- GC не закрывает сокеты вовремя.
- using = try/finally.
- Для async-ресурсов — IAsyncDisposable.
- Dispose-паттерн важен при unmanaged.
Итог
Dispose закрывает внешние ресурсы; using делает это надёжно.