- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请参阅以下取自 StreamWriter
class specification 的警告:
"Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe."
据我了解,W3WC 进程包含两个线程池,即工作线程和 I/O 线程。工作线程可以包含许多自己的线程(如果应用程序创建自己的 System.Thread 实例)。
该警告是否仅与 System.Threads 相关,还是也与工作线程和 I/O 线程相关,即由于 StreamWriter 类的实例变量不是线程安全的,那么这是否意味着如果多个工作线程访问它就会出现问题,例如如果两个不同 Web 客户端上的两个用户尝试同时写入日志文件,那么一个用户是否可以锁定另一个用户?
最佳答案
如果一个类不是线程安全的,那么您就不能获取该类的实例并从多个线程中使用该实例。它们是 IIS 中的 System.Threading.Thread、ThreadPool、Task 还是工作线程并不重要。它们都是线程——它们都是抢占式多任务处理,而对象处于不希望被抢占的状态。
不过,这在您描述的场景中并不重要。假设两个 Web 客户端尝试同时连接到服务器,并且您的请求处理程序尝试记录到一个文件,这意味着您有两个线程可能尝试同时写入该文件。但这不是线程安全问题,因为您不会在两个线程中使用相同的 StreamWriter 实例。 (至少,我希望不是 - 如果您有一个静态 StreamWriter
实例,您如何知道何时刷新它并关闭文件?跨线程共享同一个编写器没有任何意义.)
相反,每个线程应该创建自己的StreamWriter
,写入它,然后关闭它。是的,仍然存在并发问题 - 如果当第二个线程尝试打开文件时第一个线程尚未关闭文件,那么第二个线程将收到文件共享异常,并且您需要捕获该异常然后重试——但这是一个文件锁定问题,而不是线程安全问题。
关于asp.net - MSDN 引用的是 system.thread、工作线程、I/O 线程还是三者兼而有之?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19608281/
有人提出了类似的问题:MSDN subscriptions on the cheap? ,但我对提供的解决方案不感兴趣: 我不是在开发用于销售的产品,而是在创办一家咨询公司,因此 Empower 不是
我一直在 .NET 编程专业工作了三年,我一直在寻求磨砺我的工具。我是一家公司的独家开发人员,该公司最近购买了 MSDN 订阅以及 Visual Studio 2008专业的。订阅有哪些用处? 我习惯
有没有办法关闭MSDN 库页面的自动文本翻译? 我确实更喜欢英文文本,但由于拥有德语 IP 地址,微软会在每个新页面加载时激活自动翻译,这会给我一个黄色框,其中包含我当前用鼠标悬停在其上的文本的德语翻
我知道这个问题有点异端,但我很好奇...... 当然,也有特快版。但是,当微软在 OSS 世界中有效地争夺“人心”时,向全心全意支持 .NET 的开发人员收取高昂的微软软件订阅费似乎有点适得其反。很难
想知道这里是否还有其他人注册了相同的程序并可以给我一些建议。我在一两个月前的某个时候注册了 Microsoft BizSpark 计划,并激活了该计划附带的 MSDN 订阅。 在我登录到 MSDN 门
我一直被一个问题困扰:“Javadoc、Doxygen 等等……微软真的有可能不为其开发人员提供良好的文档生成器吗?”。它对我来说一直听起来很奇怪......也因为 Msdn 是一个非常好的文档排版.
我试图做一些遗留工作,并在 MSDN 上查找了 Visual C++ 6。我再也看不到它了,我能做的最好的是 Visual C++ 4.2! 有谁知道为什么会这样?有没有办法从 MSDN 获取它? 最
我升级到 Visual Studio 2010 RC,我记得为 MSDN 帮助改进事件填写了一个大表格,我想知道我会看到 Visual Studio 2008 中包含一个类似 MSDN 的帮助查看器,
我在一家小型数字营销公司工作,担任程序员,我们不是 Microsoft 合作伙伴或任何类型(金/银/铜)。但是,我们使用 .NET。 我感到困惑的是,我之前的开发人员已经离开,他获得了最新 Micro
首先,请不要以为这不是编程相关的问题,因为它非常重要。 当我在高中使用VB 6时,MSDN简直太棒了,我再也没有在其他地方寻求帮助。然后是整个.net和在线MSDN,什么也没有,并且不再有任何实际示例
我只是一个人的软件商店,并且目前有MSDN订阅。它即将更新,看起来好像要花一小笔钱。我看到TechNet订阅的费用大大减少,并且似乎包括所有相同的软件。我在这里想念什么吗?这两个软件包之间有什么区别?
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我知道这不完全是编程问题,但它是紧密相关的 - 到底如何设置 MSDN 以英文显示所有内容?我是捷克人,每一篇知识库或文档文章都会通过翻译器自动翻译为捷克语,这只会导致乱码,而将其切换为英语需要几次搜
我觉得问这个问题有点愚蠢,但我希望这对其他人也有帮助。 背景:我们/我正在使用Visual Studio 2008 SP1 (VC9)开发一些软件。我们希望随 CD 上的软件一起提供 vcredist
有没有办法以编程方式查询 MSDN.com?本质上,我有一个类名、命名空间或其他标识符,并希望找到 MSDN 文档页面,最好也传递一个版本(.net 3.5、.net 4.0、Silverlight
关闭。这个问题是 off-topic 。它目前不接受答案。 想改善这个问题吗? Update the question 所以它是堆栈溢出的 on-topic。 9年前关闭。 Improve this
我注意到 MSDN 在提及事件及其事件处理程序时多次使用“错误”术语。例如: The ProfileAutoSaving event is raised at the end of page exec
MSDN 订阅使开发人员可以访问 Visual Studio 2010 和最新的 Microsoft 平台进行开发和测试。 Microsft MSDN 订阅白皮书指出,通过“企业协议(protocol
今天在看MSDN的时候,遇到了如下代码: void draw( int I, long L ); long sq( int s ); int main() { long y; int x; y = s
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
我是一名优秀的程序员,十分优秀!