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