我是C#的新手,我很想学习最有效的方法和实用程序类来帮助处理线程。
我要做的是管理一系列工作。每个作业都有一个适用的组。作业可以并行运行,但每个分组只能运行一个作业。在一组1000个要处理的工作中,可能有100个不同的分组。
在伪代码中它将是:
var job = Jobs.First(job.GroupNotExecuting);
job.RunSynchronously();
job.GroupNotExecuting
检查该组是否有可用锁定。
在C#中实现此功能的最佳方式是什么?
如前所述,我是C#的新手,所以只想为这样的场景找到最好的习惯。将不胜感激!
(如果重要,我在Visual Studio 2013,.NET Framework 4.5中工作)
答案 0 :(得分:0)
您可以尝试在每个类中使用布尔值作为“isBusy”标志。 当作业开始时,它将“isBusy”设置为true然后执行它应该做的任何事情。但是在作业完成之前,它将“isBusy”设置为false。
对于调用代码,只需要检查“isBusy”布尔值。如果这是真的,那么工作仍然在运行。如果它是假的,那么工作就完成了,或者还没有完成。
或者,使用System.Threading命名空间。 那些给你一个可以在后台工作完成时调用的事件。
答案 1 :(得分:0)
最后,我使用了SemaphorSlim
类来处理更新。
对于每个作业,我添加了从共享/静态列表中获取信号量并等待其可用的过程。通过这种方式,可以将它们添加到同一个联合池中,并在它们可用时进行处理。
缺点是理论上一个线程可能正在等待另一个线程处理,否则它可能会在此期间寻找另一个工作来处理。