锁定AppendAllText与TextWriter

时间:2012-01-03 09:20:19

标签: c# file process locking textwriter

关于防止“已使用”错误,我想问一下,如果多个客户端多次调用第一个代码段可能会有危险吗? 或者两个代码块都是安全的吗?

我在问,因为第二个codenippet调用了一个close方法,该方法也进行了一个听起来更安全的处理。

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


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

3 个答案:

答案 0 :(得分:5)

他们都是一样的。 File.AppendAllText也会调用Dispose。

private static void InternalAppendAllText(string path, string contents, Encoding encoding)
{
    using (StreamWriter writer = new StreamWriter(path, true, encoding))
    {
        writer.Write(contents);
    }
}

答案 1 :(得分:1)

两者都同样安全。

因为你已经应用了锁,所以即使从多个客户端调用它,只有一个线程将在特定时间执行所以它不危险而不是第一个选项更简单

正如MSDN所说的关于AppendAllText方法

The file handle is guaranteed to be closed by this method

所以在第一段代码中.Net已经在做方法2中做了额外的工作

答案 2 :(得分:1)

我认为你在后面做的事情在调用File.AppendAllText

时已经在内部处理了

这里回答File.AppendAllText vs StreamWriter