[英]C# Thread Pool with Locking
我对 C# 真的很陌生,并且很想学习最有效的方法和实用程序类来帮助处理线程。
我想要做的是管理一个作业队列。 每个作业都有一个适用的组。 作业可以并行运行,但每个分组只能运行一个作业。 在一组 1000 个要处理的作业中,可能有 100 个不同的分组。
在伪代码中,它将是:
var job = Jobs.First(job.GroupNotExecuting);
job.RunSynchronously();
其中job.GroupNotExecuting
检查该组是否有可用的锁。
在 C# 中实现它的最佳方法是什么?
如前所述,我是 C# 的新手,所以只想为这样的场景养成最佳习惯。 将不胜感激!
(以防万一,我在 Visual Studio 2013、.NET Framework 4.5 中工作)
您可以尝试在每个类中使用一个布尔值作为“isBusy”标志。 当作业开始时,它将“isBusy”设置为 true,然后执行它应该执行的任何操作。 但就在作业完成之前,它将“isBusy”设置为 false。
对于调用代码,它只需要检查“isBusy”布尔值。 如果为真,则作业仍在运行。 如果为 false,则作业已完成或尚未运行。
或者,使用 System.Threading 命名空间。 这些给你一个可以在后台工作完成时调用的事件。
最后,我使用SemaphorSlim
类来处理更新。
对于每个作业,我添加了从共享/静态列表中获取信号量并等待它可用的过程。 通过这种方式,它们可以被添加到同一个联合池中,并在它们可用时进行处理。
不利的一面是,理论上一个线程可能正在等待另一个线程进行处理,否则它可能会同时寻找另一个作业来处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.