我有一个程序监视文件中的更改,然后在出现更改时处理更新。阻塞任务,直到前一个任务已完成
我需要能够同时处理不同文件上的更改,但只能按顺序处理同一文件中的更改。
每个文件都有一个唯一的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的现有进程完成。
如果这不会为你做尝试别的东西从并行lib,它创建完全是我们程序员停止使用像睡眠 – bresleveloper 2012-07-11 10:42:03
所有组合类型对不起,我应该提到该应用程序已经被线程化了。所以这不是问题。我正在寻找更像是一个队列,我可以传递项目,如果没有其他项目具有相同的ID它会处理,否则它会阻止,直到具有相同的ID现有的过程完成。 – RagtimeWilly 2012-07-11 12:01:19