管理重复任务

时间:2018-07-16 16:06:04

标签: c# parallel-processing task

我有一个周期性的可取消任务启动器,它来自以下问题:

How to create a thread/Task with a continuous loop?

public static class TaskHelper
{
    public static class RecurrentCancellableTask
    {
        public static Task StartNew(
            Action action,
            TimeSpan pollInterval,
            CancellationToken token,
            TaskScheduler scheduler = null,
            TaskCreationOptions taskCreationOptions = TaskCreationOptions.LongRunning
            )
        {
            if (scheduler == null) scheduler = TaskScheduler.Default;
            return Task.Factory.StartNew(
                () =>
                {
                    while (true)
                        try
                        {
                            action();
                            if (token.WaitHandle.WaitOne(pollInterval)) break;
                        }
                        catch
                        {
                            return;
                        }
                }, token, taskCreationOptions, scheduler);
        }
    }
}

一切都像魅力。 但是,现在我需要将此任务启动器放入循环中并启动x作业:

 foreach (var job in collection)
                    {
                        TaskHelper.RecurrentCancellableTask.StartNew(() => { somecode(job); }, TimeSpan.FromMilliseconds(i), token);
                    }

每n秒启动一次收集循环 如果已删除集合中的作业,则必须停止该作业。

如果添加了来自集合的作业,则该作业必须每i毫秒运行一次。

如果收集中的某项作业每隔毫秒运行一次,则必须忽略该任务,并且不能再启动它。

工作可以并行启动。

我该如何处理这种情况? 有什么可以看的任务管理器模式吗?

谢谢!

D

0 个答案:

没有答案