繁体   English   中英

如何在ASP.net中监视和限制QueueBackgroundWorkItem线程的数量?

[英]How do I monitor and limit the number of QueueBackgroundWorkItem threads in ASP.net?

我有一个ASP.Net应用程序充当系统之间的接口,这些系统倾向于通过多个请求以突发方式发送数据,我想启动一个后台任务来执行一些处理,但实际上只希望一个后台任务来完成。 我可以使用HostingEnvironment.QueueBackgroundWorkItem,但是它将为每个传入请求不加区别地启动一个线程,这是一个问题。

启动后台进程时,我希望它使它所拥有的工作(在连接的数据库中)排队,然后检查是否正在运行另一个后台进程。 如果有的话,它应该完成,因为其他进程将处理排队的工作。 如果没有其他后台进程在运行,那么我希望它开始处理排队的工作,直到没有其他事情要做,然后它将停止。

该过程不是繁重的任务,也不是长期运行的任务,但主要的约束条件是,所有事情都必须按照严格的顺序进行处理,因此并行线程存在风险。 在单个过程中,很容易确保一切都按顺序进行处理。

如何在不转向外部服务的情况下实现这一目标?

好像是经典的生产者消费者方案。 创建生产者加入的BlockingCollection。 创建一个永久的LongRunning Task以耗尽该集合。

您可以根据需要分批排干。

这不适用于QueueBackgroundWorkItem因为您最终需要退出放入QueueBackgroundWorkItem的工作,以便工作进程可以正常关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM