using System.IO;
class Program
{
static void Main()
{
using (StreamWriter writer = new StreamWriter("important.txt"))
{
writer.Write("Word ");
writer.WriteLine("word 2");
writer.WriteLine("Line");
}
}
}
Это типовой пример, который мы имели в виду при использовании слова «ключевое слово». Никогда не закрывайте Streamwriter явно и не удаляйте его явно. Использование делает всю магию для вас. Распоряжается, когда работа завершена, и когда вы выходите из этого, используя блок.
В многопоточной среде, если вы используете close или dispose явно, потоки будут иметь проблемы, учитывая, что поток может просто попытаться открыть объект, в то время как предыдущий поток только что удалил его. у вас будут проблемы с синхронизацией ваших потоков. Это та же проблема, с которой обычно сталкиваются в серверных приложениях, которые имеют несколько подключений к базе данных. Вот почему мы должны использовать его с Idisposable.
C # USING ключевое слово - когда и когда его не использовать?
Это объясняет больше об этом.
Обновление: Ваша проблема заключается в одновременной записи нескольких клиентов в один файл. Как уже говорилось выше, ни один процесс не может получить один и тот же файл одновременно в режиме записи. Либо приходится ждать, если вы пишете большие данные, это время ожидания значительно заметно, либо вы можете собирать объекты с клиентов, ставить их в очередь и фактически записывать их с сервера. Также можно избежать предоставления клиенту доступа на запись к файлу, находящемуся на сервере. Если ваши данные сериализуются, вы можете использовать буферы протокола Google для передачи данных.
Если вы обрабатываете файл с клиента, и если клиентский процесс завершается в середине пути, теперь не будет никакого дескриптора записи в файл, и, очевидно, он будет свободен для другого процесса, чтобы получить дескриптор для него с записью доступ.