读取asp.net多线程环境线程安全内的文本文件吗?
我的意思是阅读下面的文本文件
File.ReadAllLines(
HttpContext.Current.Server.MapPath(@"textFiles\generic_anchors.txt")
).ToArray();
asp.net 4.5
以上读数会导致任何异常吗?
答案 0 :(得分:4)
是的,没有。
如果有一些代码写入文件,则需要同步对文件的所有访问权。
但是,如果您只是在阅读文件并且在网站运行时它永远不会更改,那么这不是问题。多个线程可以同时读取同一个文件。
旁注:最后ToArray
来电只是浪费。该方法已经返回一个数组。
答案 1 :(得分:0)
此类型的任何公共静态(在Visual Basic中为Shared)成员都是 线程安全。任何实例成员都不能保证是线程 安全
当然,例外问题是另一场比赛。如果某个其他进程在您尝试读取的文件上获得独占锁定,则保证发生异常
答案 2 :(得分:0)
你问的是两个不同的问题。
当通过多个线程同时调用相同的方法时,线程安全涉及消除竞争条件(损坏,不一致的结果,死锁等)。在.NET BCL中,我想不出不是线程安全的任何static
方法。然而,这并不神奇 - 如果您要创建自己的static
方法,则需要确保其线程安全。
那么,你的第一个问题(来自标题“File.ReadAllLines线程安全吗?”)的答案是肯定的。由于File.ReadAllLines
是BCL中的静态方法,因此它是线程安全的。
然而,你的第二个问题是“上述读数会导致任何异常吗?”。这与线程安全无关。线程安全方法可以抛出异常而不会牺牲它的正确性。作为MSDN shows for File.ReadAllLines
,可能的例外列表是:
这些异常都与线程安全无关,实际上是为非线程安全 FileStream
class记录的同一组异常。