我正在尝试实现基于文件的自动增量标识值(在 TXT 文件中存储的 int
值),并且我正在尝试想出处理并发问题的最佳方法。此身份将用于我的内容的唯一 ID。当保存新内容时,这个文件被打开,值被读取,递增,新内容被保存,递增的值被写回文件(我们存储下一个可用 ID 还是最后一个发布的 ID 并不重要)。在进行此操作时,可能会出现另一个过程并尝试保存新内容。前一个进程使用 FileShare.None
打开文件,因此在第一个进程释放文件之前,其他进程无法读取该文件。虽然发生这种情况的可能性很小,但仍有可能发生。
现在,当这种情况确实发生时,我们有两个选择:
- 等待文件可用 -
Emulate waiting on File.Open in C# when file is locked
我们在这里讨论的是毫秒,所以我想这不会是一个问题,只要发生一些奇怪的事情并且文件永远不可用,那么这个解决方案将导致无限循环,所以不是一个理想的解决方案
- 实现某种队列并对队列中的文件运行所有操作。我的用户体验要求是这样的,在保存/修改文件时,用户永远不会被告知异常或出现问题 - 当队列上的操作也失败时,他会通过非常友好的用户界面获得有关它们的通知。
在撰写本文时,该解决方案应该在 ASP.NET MVC 应用程序中工作(通过 AJAX 同步和异步),但如果可能,它应该使用也可以在 Silverlight 或 Windows 窗体或 WPF 应用程序中工作的概念.
关于这两个选项,您认为哪个更好?对于第二个选项,有哪些可能的技术可以实现这一点?
最佳答案
ReaderWriterLockSlim类似乎是同步访问共享资源的一个很好的解决方案。
关于c# - 当文件被锁定时,队列文件操作以备后用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6004665/