我有一个程序监视文件中的更改,然后在发生更改时处理更新。
我需要能够同时处理不同文件的更改,但只能按顺序处理同一文件中的更改。
每个文件都有一个唯一的ID,所以目前我正在使用ConcurrentDictionary监视当前正在处理和阻塞的任务,直到可以处理第二个更新:
private ConcurrentDictionary<int, ITask> activeTasks =
new ConcurrentDictionary<int, ITask>();
public bool TryProcessTask(ITask task)
{
while(activeTasks.ContainsKey(task.Id))
{
Thread.Sleep(50);
}
activeTasks.TryAdd(task.Id, task);
bool isProcessed = task.TryProcess();
ITask t;
activeTasks.TryRemove(task.Id, out t);
return isProcessed;
}
我想知道是否有人能告诉我更好的方法吗?
我原以为会有一个特定的.NET对象可以满足这种情况吗?
谢谢,
修改
为了澄清,我正在寻找类似于我可以传递项目的队列的东西,并且如果没有其他具有相同id的项目将处理,否则它将阻塞,直到具有相同id的现有进程完了。