我想限制我的多线程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服务将从多个并发调用的角度来看是安全的,同时将立即处理定时器事件.