c# - 当文件被锁定时,队列文件操作以备后用

标签 c# .net asp.net-mvc windows task-queue

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

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

  1. 等待文件可用 -

Emulate waiting on File.Open in C# when file is locked

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

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

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

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

最佳答案

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

关于c# - 当文件被锁定时,队列文件操作以备后用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6004665/

相关文章:

c# - 从代码运行触发的 Azure WebJob

c# - MVC 中的 JQuery getJSON

c# winforms - 更改数组的值不起作用

javascript - 尝试使用 connection.Start() 连接到服务器时出现 SignalR 客户端错误

.net - 在 VB.NET 中将十六进制值存储在变量中(Dim xx as "Hex")

c# - Unity 中的装饰器有很多参数

asp.net-mvc - 如何在MVC中提交表单

asp.net-mvc - 堆栈溢出问题路由

c# - ASP.NET MVC 5 Bootstrap Accordion 无法正常工作

c# - 检查 T 是否为 IEnumerable