Реализация поставленных в очередь задач, которые начинаются на основе условий

Я ищу идеальную / потокобезопасную реализацию очереди задач, которая будет запускать каждую задачу на основе внутреннего условия (которое я также хочу проверять только через определенный промежуток времени), но также проверяю, что не слишком много других задачи выполняются. Я также хочу способ возврата прогресса каждой задачи в очереди.

Чтобы дать некоторое представление, у меня есть 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 ответов

Другие вопросы по тегам