- 我有100个相同的任务需要完成 - 所有任务彼此独立 - 我想同时处理最多15个任务 - 每当一个任务完成时,就会启动一个新的任务,直到所有任务都完成
假设每个任务在完成时都会触发一个事件(我正在使用BackgroundWorker类),我可以想到几种方法来实现这个需求,但我不确定哪种方法是“正确”的。我希望你们这些大牛能指点一下方向。
解决方案1:在我的Main()函数中使用while(continue){Threading.Sleep(1000);}循环。Job_Completed事件处理程序中的代码将在没有剩余任务要排队且所有排队的任务已完成时设置continue = false。我以前用过这个解决方案,虽然它似乎工作得很好...但对我来说有点“奇怪”。
解决方案2:在我的Main()函数中使用Application.Run()。同样,在Job_Completed事件处理程序中的代码将在没有剩余任务要排队且所有排队的任务已完成时调用Application.Exit()。
解决方案3:使用ThreadPool,将所有500-1000个请求排队,让它们同时运行10个(SetMaxThreads),并以某种方式等待它们全部完成。
在所有这些解决方案中,基本思路是每当另一个任务完成时启动一个新任务,直到没有任务为止。因此,问题不仅是等待现有任务完成,还要等待没有任何挂起的任务就绪。如果ThreadPool是正确的解决方案,那么等待ThreadPool完成所有排队的项目的正确方法是什么?
我认为我最大的困惑在于我不明白事件是如何能够从我的Main()函数中触发的。显然,它们可以,我只是不理解从Windows消息循环的角度来看它的机制。解决这个问题的正确方法是什么?为什么?