我有一个周期性的可取消任务启动器,它来自以下问题:
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