实现基于条件启动的排队任务

时间:2016-03-13 05:44:10

标签: c# multithreading task-parallel-library queueing

我正在寻找一个理想/线程安全的任务队列实现,它将根据内部条件启动每个任务(我也只想以定时间隔检查),但也检查没有运行太多其他任务。我还想要一种方法来返回队列中每个任务的进度。

为了给出一些背景知识,我有一个FileSystemWatcher,它在正在创建的新文件夹上发送一个事件。然后我想将它放入队列来处理文件夹,当它不再被锁定时。但与此同时,我希望防止过多的Process任务实例运行。

这是我所追求的一些伪代码。

    private static void EventToQueue(object sender, EventArgs e)
    {
        ProcessQueue.Enqueue(Task, condition);
    }

    private static async void NewQueueObject(object sender, QueueObject e)
    {
        if (e.Condition && ProcessQueue.ActiveTask < 4)
        {
             var progress = new Progress<int>();

             progress.ProgressChanged += ( s, e ) =>
             {
                 UpdateProgress(e.Value);
             };
             await LongProcess(e, progress);
        }
        else
        {
            e.Delay(30);
        }
    }

0 个答案:

没有答案