Должен ли я вызывать Close () или Dispose () для потоковых объектов?

Классы, такие как Stream , StreamReader , StreamWriter и т. Д., Реализуют интерфейс IDisposable . Это означает, что мы можем вызвать метод Dispose () для объектов этих классов.Они также определили общедоступный метод под названием Close () . Теперь это меня смущает, что я должен вызвать, когда закончу с объектами? Что, если я позвоню обоим?

Мой текущий код таков:

using (Stream responseStream = response.GetResponseStream())
{
   using (StreamReader reader = new StreamReader(responseStream))
   {
      using (StreamWriter writer = new StreamWriter(filename))
      {
         int chunkSize = 1024;
         while (!reader.EndOfStream)
         {
            char[] buffer = new char[chunkSize];
            int count = reader.Read(buffer, 0, chunkSize);
            if (count != 0)
            {
               writer.Write(buffer, 0, count);
            }
         }
         writer.Close();
      }
      reader.Close();
   }
}

Как видите, я написал с использованием конструкций () , которые автоматически вызывают метод Dispose () для каждого объекта. Но я также вызываю методы Close () . Это правильно?

Пожалуйста, предложите мне лучшие практики использования потоковых объектов. : -)

Пример MSDN не использует using () конструкции и вызывает метод Close () :

Is это хорошо?

139
задан Stas Ivanov 30 June 2017 в 16:16
поделиться