0

ファイルの変更を監視し、変更が発生したときに更新を処理するプログラムがあります。

異なるファイルの変更を同時に処理できるようにする必要がありますが、同じファイルの変更を順次処理することしかできません。

各ファイルには一意の ID があるため、現在 ConcurrentDictionary を使用して、現在処理中のタスクを監視し、2 番目の更新が処理されるまでブロックしています。

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 に答える