2012-01-03 55 views
1

关于防止“已在使用”错误,我想问如果第一个代码段可能潜在危险,如果从多个客户端多次调用? 或者两个代码块是否安全?锁定AppendAllText vs TextWriter

我在问,因为第二个codesnippet调用了close方法,它也做了一个更安全的处理。

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


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

称为File.AppendAllText

相同的,当你正在做什么后者已经照顾内部为什么不把它的文件句柄,只要该预期写入?使用锁来控制多个客户端的写入。 – 2012-01-03 09:31:44

回答

5

他们都是相同的。 File.AppendAllText来电也处置。

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

在这种情况下,会有打开和关闭文件句柄*的开销。这可能会增加成本,如果多次被多个客户端调用。 – 2012-01-03 09:30:40

+0

是的,但这不是OP要求的。 – 2012-01-03 09:40:27

1

两者同样安全。

正如你所申请的锁所以即使是从多个客户端被称为只有一个线程会在特定的时间来执行,所以它不是危险的,而第一个选项是更简单

由于MSDN说,大约AppendAllText方法

The file handle is guaranteed to be closed by this method

所以在第一段代码的.NET已经做额外的工作,你正在做的方法2