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 的现有进程完成。

4

2 回答 2

1

使用任务并行库..

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

它将首先完成第一个任务,然后仅使用continuewith启动新任务

于 2012-07-11T10:36:55.017 回答
0

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

于 2012-07-11T10:49:08.740 回答