首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >File.ReadAllLines线程安全吗?

File.ReadAllLines线程安全吗?
EN

Stack Overflow用户
提问于 2013-06-10 20:24:32
回答 3查看 1.5K关注 0票数 2

在asp.net多线程环境中读取文本文件线程安全吗?

我的意思是像下面这样阅读文本文件

代码语言:javascript
复制
File.ReadAllLines(
HttpContext.Current.Server.MapPath(@"textFiles\generic_anchors.txt")
).ToArray();

asp.net 4.5

上面的阅读会导致任何异常吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-10 20:30:48

是,也不是。

如果有一些代码写入该文件,则需要同步所有对该文件的访问。

但是,如果您只读取文件,并且在站点运行时该文件从未更改,那么这不是问题。多个线程可以同时读取同一文件。

附注:末尾的ToArray调用只是一种浪费。该方法已返回一个数组。

票数 4
EN

Stack Overflow用户

发布于 2013-06-10 20:29:41

File class上的MSDN

此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的。不能保证任何实例成员都是线程安全的。

当然,异常问题是另一种游戏。如果某个其他进程获得您正在尝试读取的文件的独占锁,则肯定会发生异常

票数 0
EN

Stack Overflow用户

发布于 2013-06-10 21:24:42

你在问两个不同的问题。

线程安全与消除竞争条件(损坏、不一致的结果、死锁等)有关。当通过多个线程同时调用相同的方法时。在.NET BCL中,我想不出任何不是线程安全的static方法。然而,这并不神奇--如果你要创建自己的static方法,你需要确保它的线程安全性。

因此,您的第一个问题(来自标题“File.ReadAllLines线程安全吗?”)的答案是肯定的。因为File.ReadAllLines是BCL中的静态方法,所以它是线程安全的。

然而,您的第二个问题是“以上阅读是否会导致任何例外?”这与线程安全没有多大关系。线程安全的方法可以在不牺牲正确性的情况下抛出异常。作为MSDN shows for File.ReadAllLines,可能的异常列表如下:

  • ArgumentException
  • ArgumentNullException
  • PathTooLongException
  • DirectoryNotFoundException
  • UnauthorizedAccessException
  • FileNotFoundException
  • NotSupportedException
  • SecurityException
  • IOException

所有这些异常都与线程安全没有任何关系,实际上是为非线程安全的FileStream class记录的同一组异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17023816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档