c# - Quartz.net + 任务并行库

标签 c# multithreading task-parallel-library quartz.net

我正在努力升级我们内部使用的作业调度系统,该系统使用 Quartz.net。查看最新版 Quartz 的源代码,我注意到它仍然使用自己的线程池实现,这与 .NET 4.0 开始发布的大大改进的线程池(或来自 System.Threading.Tasks 的任何东西)相反。

我很想知道是否有人成功实现了一个作业调度系统,该系统使用 Quartz.net 的调度功能和 TPL 的线程池。将 Quartz 的线程池换成 TPL 的线程池是否相对容易? Quartz 是否仍然与任务世界相关?或者,正如我对 .NET 4.x 线程池的巨大改进(核心意识、本地队列、改进的锁定等)所推销的那样,Quartz 的线程池是否足以用于典型的粗粒度后台作业并且不值得迫使 TPL 加入其中的努力?

提前感谢您提供有关一起使用(或不使用)这两个工具的任何见解。

最佳答案

Quartz.NET 用于解决与 TPL 稍有不同的问题。 Quartz.NET 旨在用于循环作业调度,具有丰富的执行计时功能集。另一方面,TPL 用于计算工作负载的高性能并行执行。

因此,从本质上讲,您(通常)使用 Quartz.NET 进行精确调度,使用 TPL 处理需要利用所有计算资源(内核等)尽快完成的并发工作负载。

话虽如此,我认为 Quartz.NET 使用的线程池实现足以完成这项工作。另请记住,Quartz.NET 与 .NET 3.5 兼容,不能使用仅 4.0 的功能。

当然,您也可以在您的解决方案中始终将两者结合起来。

关于c# - Quartz.net + 任务并行库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15169596/

相关文章:

c# - ASP.NET Core docker 构建错误

c# - 为什么在使用异步方法时会捕获类作用域变量,而在使用 Action<T> 时却不会(内部代码示例)?

c# - 空条件运算符,在某些机器上的行为不符合预期

c# - 简单的 SELECT WHERE LINQ 查询列表

c - pthread malloc 段错误

java - 如何在我的查找器类中使用 sleep 方法

c# - 如何使 SqlDataReader.ReadAsync() 异步运行?

java - 在适用于 Android 的 Java 中 move 对象/位图

c# - 传入一个已经取消的 CancellationToken 导致 HttpClient 挂起

c# - 如何在任务中取消 web 服务请求,并在取消时做一些事情