阻止任务直到上一个任务完成

时间:2012-07-11 10:32:42

标签: c# c#-4.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的现有进程完了。

2 个答案:

答案 0 :(得分:1)

使用任务并行库..

Task.Factory.StartNew(METHOD).ContinueWith(task =&gt; DispatcherHelper.Dispatch(()=&gt; {Mouse.OverrideCursor = null;}));

首先完成第一项任务,然后只使用继续

启动新任务

答案 1 :(得分:0)

如果您想要异步调用,可以使用Task.Factory.Startnew()  否则使用Parallel.ForEach()。希望这会有所帮助.. herehere