4

我正在尝试实现基于文件的自动增量标识值(以int存储在 TXT 文件中的值),并且我正在尝试提出处理并发问题的最佳方法。此身份将用于我的内容的唯一 ID。当保存新内容时,这个文件被打开,值被读取,增加,新内容被保存,增加的值被写回文件(我们是否存储下一个可用的 ID 或最后发布的 ID 并不重要)。在执行此操作时,可能会出现另一个过程并尝试保存新内容。前一个进程打开文件,FileShare.None因此在第一个进程释放文件之前,其他进程将无法读取该文件。虽然这种情况发生的可能性很小,但它仍然可能发生。

现在,当这种情况发生时,我们有两个选择:

  1. 等待文件可用 -

当文件被锁定时,在 C# 中模拟等待 File.Open

我们在这里谈论毫秒,所以我想这不会是一个问题,只要发生一些奇怪的事情并且文件永远不会变得可用,那么这个解决方案会导致无限循环,所以不是一个理想的解决方案

  1. 实现某种队列并对队列中的文件运行所有操作。我的用户体验要求是,在保存/修改文件时,用户永远不应该被告知异常或出现问题 - 当队列上的操作也失败时,他会通过非常友好的用户界面得到通知。

在撰写本文时,该解决方案应该在 ASP.NET MVC 应用程序中工作(通过 AJAX 同步和异步),但如果可能,它应该使用在 Silverlight 或 Windows 窗体或 WPF 应用程序中也可以工作的概念。

关于这两个选项,您认为哪一个更好,对于第二个选项,有哪些可能的技术来实现这一点?

4

1 回答 1

2

ReaderWriterLockSlim类似乎是同步访问共享资源的一个很好的解决方案

于 2011-05-14T21:00:04.313 回答