c# – System.Timer在单独的线程中运行并保持线程限制

我想限制我的多线程WCF服务中的线程数.所以,我使用ThreadPool.SetMaxThread函数.现在,我想使用System.Timers以给定的时间间隔生成事件.

但是,我的服务同时收到许多要在线程池中执行的操作.当我的计时器结束时,操作在ThreadPool中排队(我有时会预期100,000个任务),因此执行起来很慢.

有没有办法在之前执行我过去的事件?例如,通过设置在线程池上排队的优先级任务?或者在线程池之外的事件?

我想在我的服务中保持我的全局线程限制.

解决方法:

如果您只需要限制线程数来保护拒绝服务攻击,那么这里更好的选择是限制ServiceThrottlingBehavior的maxConcurrentCalls属性.
详情请见http://msdn.microsoft.com/en-us/library/system.servicemodel.description.servicethrottlingbehavior.maxconcurrentcalls.aspx

默认情况下,此参数是处理器计数的16倍.

如果是这样,那么您可以避免限制线程池的最大线程数.

然后,您的WCF服务将从多个并发调用的角度来看是安全的,同时将立即处理定时器事件.

上一篇:c# – 线程池:跨线程操作无效.


下一篇:c# – ThreadPool在调试模式和运行时的行为不同