线程安全文件读写:使用文件名/锁字典,还是只捕获IOException?

问题描述 投票:0回答:1

我有一些进程会定期向文件添加行,还有一些会定期读取这些文件。这些文件不是很大,并且附件很常见但是很小。

我只可以在循环延迟计数器中捕获IOException,或者我可以使用静态ConcurrentDictionary 来防止争用的发生。

捕获异常是最棘手的问题,但是我担心最终读取的是不完整的文字。使用锁字典是更安全还是不必要?

c# multithreading file concurrency ioexception
1个回答
1
投票

[如果您担心读取不完整的文字,则可以始终将file.OpenFileShare.None / Fileshare.Read结合使用。此操作与重试一起使用应该是安全的,但是如果存在争用,可能会很慢。

创建服务可能是最简洁的解决方案。在这种情况下,我会将所有写入/读取委派给服务,并在可能的情况下缓存文件,并使用队列来写出更改。

如果服务在某处丢失消息并且未释放锁,则仅将服务用于管理锁可能很危险。

© www.soinside.com 2019 - 2024. All rights reserved.