【发布时间】:2011-07-20 10:19:21
【问题描述】:
我正在尝试创建一个使用 TPL 以异步(和并行)方式执行计划任务的服务。
基本要求是对于一堆不同的任务,每个任务都有自己的预定速率(一些每秒执行一次,其他 30 秒,其他 5 分钟等)同时执行。而且我不确定解决这个问题的最佳方法,特别是考虑到 ConcurrentBag(我认为它是所有未来任务的持有者)不包含用于选择需要执行的任务集合的方法。
这也意味着我不能使用 WaitAny 或 WaitAll,因为这些短期任务需要独立完成并重新排队。
我应该如何处理这个?
编辑:
好吧,基本上我的设计是这样的:
一个 ScheduledTask,它是具有 Scheduled DateTime 属性的 Task 的包装器。其中一堆存储在 ConcurrentBag 中
一个轮询 ConcurrentBag 的控制器(当前只是一个 while(true) 循环,但可能是一个 Timer 或类似的),删除任何已调度的,并 Start() 的它们。
每个 ScheduledTask 都持有对 ConcurrentBag 的引用,并在完成时将其自身的一个新实例与新的 ScheduledTime 排入队列。
到目前为止,这种设计似乎可行,但是每个 Task 都包含对 ConcurrentBag 的引用,这对我来说并不合适。任何设计 cmets 或建议将不胜感激。
【问题讨论】:
-
在我看来,您只需使用计时器即可畅通无阻。
-
什么意思?我将编辑更多信息
标签: .net scheduling task-parallel-library