gpt4 book ai didi

.net - .NET 4 中的任务调度程序设计(任务并行库)

转载 作者:行者123 更新时间:2023-12-01 13:01:59 25 4
gpt4 key购买 nike

我正在尝试创建一个使用 TPL 以异步(和并行)方式执行预定任务的服务。

基本要求是,对于一堆不同的任务,每个任务都有自己的计划速率(一些每秒执行一次,其他 30 秒,其他 5 分钟等)并发执行。而且我不确定解决此问题的最佳方法,特别是考虑到 ConcurrentBag(我考虑将其作为所有 future 任务的持有者)不包含用于选择需要执行的任务集合的方法。

这也意味着我不能使用 WaitAny 或 WaitAll,因为这些短时间运行的任务需要独立完成并自行重新排队。

我该如何处理?

编辑:

好的,基本上我的设计是这样的:

一个 ScheduledTask,它是具有 Scheduled DateTime 属性的 Task 的包装器。其中一堆存储在 ConcurrentBag 中

轮询 ConcurrentBag 的 Controller (目前只是一个 while(true) 循环,但可以是一个计时器或类似的),删除任何已安排的,然后 Start() 的它们。

每个 ScheduledTask 都持有对 ConcurrentBag 的引用,并在其完成时使用新的 ScheduledTime 将其自身的新实例加入队列。

到目前为止,这种设计似乎可行,但每个 Task 都持有对 ConcurrentBag 的引用,这让我不太满意。如有任何设计意见或建议,我们将不胜感激。

最佳答案

您是否考虑过使用 RX 的 EventLoopScheduler?

Rx 有很多不同的调度器实现,但 EventLoopScheduler 听起来像是适合你的那个。

要使用 RX 创建重复任务,您只需使用 Observable.Interval(timespan, scheduler).Subscribe(action)

关于.net - .NET 4 中的任务调度程序设计(任务并行库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5390736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com