gpt4 book ai didi

c# - 使用 TextWriter.Synchronized 或锁定多线程文件 IO - C# WPF .net 4.5

转载 作者:行者123 更新时间:2023-12-03 12:55:48 26 4
gpt4 key购买 nike

好的,在多线程系统中有两种将文本写入文件的方法

哪个比其他的好

第一种情况:有一个静态对象来锁定 streamwriter 并进行操作

第二种情况有:

     TextWriter twWaitingToBeFetched;
twWaitingToBeFetched = TextWriter.Synchronized(new StreamWriter(stringPath, true));
twWaitingToBeFetched.WriteLine(srNewComposedUrl);
twWaitingToBeFetched.Flush();

现在您认为哪个更好,为什么?

我需要多个线程任务来写入同一个流

C# .net 4.5 - WPF 应用程序

最佳答案

如果你使用第二种变体,锁定是隐式和隐藏的。调用代码对锁一无所知。事实上,它可能会错误地假设对 WriteLine 的两次调用是原子的,并且将在输出中一个接一个地出现。

使用显式锁定,以便您可以更好地控制哪些操作看起来是原子的。


 TextWriter twWaitingToBeFetched;
twWaitingToBeFetched = TextWriter.Synchronized(new StreamWriter(stringPath, true));
twWaitingToBeFetched.WriteLine(srNewComposedUrl);
twWaitingToBeFetched.Flush();

这不会同步任何内容,因为每个 WriteLine 都是在一个新的、独立的同步编写器上分派(dispatch)的。您还需要正确处理对象,不要在不必要的情况下调用 Flush

关于c# - 使用 TextWriter.Synchronized 或锁定多线程文件 IO - C# WPF .net 4.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25285096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com