枕上从妨一夜睡,灯前读尽十年诗。这篇文章主要讲述锁定AppendAllText与TextWriter相关的知识,希望能为你提供帮助。
关于防止“已经使用”错误,我想问一下,如果多个客户端多次调用第一个代码片段可能会有危险吗?或者两个代码块是否安全?
我问,因为第二个codenippet调用了一个close方法,该方法也进行了一个听起来更安全的配置。
//FIRST
lock (_myLock)
{
File.AppendAllText(_filePath, text);
}//SECOND
lock (_myLock)
{
TextWriter tw = new StreamWriter(_filePath, true);
tw.Write(text);
tw.Close();
}
答案它们都是一样的。
File.AppendAllText
也打电话给Dispose。private static void InternalAppendAllText(string path, string contents, Encoding encoding)
{
using (StreamWriter writer = new StreamWriter(path, true, encoding))
{
writer.Write(contents);
}
}
另一答案两者都同样安全。
因为你已经应用了Lock,所以即使从多个客户端调用它,只有一个线程将在特定时间执行所以它不危险而不是第一个选项更简单
正如MSDN所说的
AppendAllText
方法The file handle is guaranteed to be closed by this method
所以在第一段代码中.Net已经在方法2中做了额外的工作
另一答案我认为你在后面做的事情在调用File.AppendAllText时已经在内部处理了
【锁定AppendAllText与TextWriter】同样在这里回答File.AppendAllText vs StreamWriter
推荐阅读
- 在Android中使用SQLite获取RowID
- Xamarin Android Nunit测试在测试资源管理器中可被发现,但在运行测试时未被发现。 (VS2017)
- 有人可以建议我为https://jpetstore.cfapps.io/catalog/categories/FISH创建动态xpath
- android中的自定义,禁用和空白地图
- 添加Google地图活动后,Android内置错误
- 无法找到类com.google.android.gms.maps.SupportMapFragment
- Android google Places API超出了每日配额
- 在我的屏幕上显示给我的区域中的android上的地图中显示标记
- 如何在现有的旧版Android项目中使用最新的API添加Google Map()