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