2012-07-11 96 views
0

我有一个程序监视文件中的更改,然后在出现更改时处理更新。阻塞任务,直到前一个任务已完成

我需要能够同时处理不同文件上的更改,但只能按顺序处理同一文件中的更改。

每个文件都有一个唯一的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的现有进程完成。

回答

1

使用任务并行库..

Task.Factory.StartNew(METHOD).ContinueWith(任务=> DispatcherHelper.Dispatch(()=> {Mouse.OverrideCursor = NULL;}));

将首先完成第一个任务,然后只用continuewith

+0

如果这不会为你做尝试别的东西从并行lib,它创建完全是我们程序员停止使用像睡眠 – bresleveloper 2012-07-11 10:42:03

+0

所有组合类型对不起,我应该提到该应用程序已经被线程化了。所以这不是问题。我正在寻找更像是一个队列,我可以传递项目,如果没有其他项目具有相同的ID它会处理,否则它会阻止,直到具有相同的ID现有的过程完成。 – RagtimeWilly 2012-07-11 12:01:19

0

如果你想异步调用,您可以使用Task.Factory.Startnew() 与Parallel.ForEach别人去开始新的任务( )。希望这会有所帮助.. herehere