Блокировка AppendAllText против TextWriter - PullRequest
1 голос
/ 03 января 2012

Относительно предотвращения ошибок "уже используется", я хочу спросить, может ли первый фрагмент кода быть потенциально опасным, если он вызывается несколько раз из нескольких клиентов? Или оба блока кода одинаково безопасны?

Я спрашиваю, потому что второй codenippet вызывает метод close, который также делает удаление, которое звучит безопаснее.

//FIRST
lock (_myLock)
{
    File.AppendAllText(_filePath, text);
}


//SECOND
lock (_myLock)
{
    TextWriter tw = new StreamWriter(_filePath, true);
    tw.Write(text);
    tw.Close();
}

Ответы [ 3 ]

5 голосов
/ 03 января 2012

Они оба одинаковы.File.AppendAllText звонит Утилизировать тоже.

private static void InternalAppendAllText(string path, string contents, Encoding encoding)
{
    using (StreamWriter writer = new StreamWriter(path, true, encoding))
    {
        writer.Write(contents);
    }
}
1 голос
/ 03 января 2012

Я думаю, что то, что вы делаете в последнем, уже заботится внутри, когда называется File.AppendAllText

здесь ответили так же File.AppendAllText против StreamWriter

1 голос
/ 03 января 2012

Оба одинаково безопасны.

Как вы применили блокировку, так что даже если она вызывается из нескольких клиентов, в определенный момент времени будет выполняться только один поток, так что это не опасно, скорее первый вариант более прост

Как говорится в MSDN о AppendAllText методе

The file handle is guaranteed to be closed by this method

Итак, в первом фрагменте кода .Net уже выполняет дополнительную работу, которую вы выполняете в подходе 2

...