我想限制多线程 WCF 服务中的线程数。所以,我使用了 ThreadPool.SetMaxThread
函数。现在,我想使用 System.Timers
以给定的时间间隔生成事件。
但是,我的服务同时收到许多要在线程池中执行的操作。当我的计时器结束时,操作会在线程池中排队(我有时期望有 100,000 个任务),因此执行起来很慢。
有没有办法执行我之前经过的事件?例如,通过设置在线程池上排队的优先级任务?还是在线程池之外发生了 Elapsed 事件?
我想在我的服务中保持线程的全局限制。
最佳答案
如果您只需要限制线程数来保护拒绝服务攻击,那么这里更好的选择是限制 ServiceThrottlingBehavior
的 maxConcurrentCalls
属性。
查看详情 http://msdn.microsoft.com/en-us/library/system.servicemodel.description.servicethrottlingbehavior.maxconcurrentcalls.aspx
默认情况下,此参数是处理器数量的 16 倍。
如果是这样,那么您可以避免限制线程池的最大线程数。
那么您的 WCF 服务将从多个并发调用的角度来看是安全的,同时计时器事件将被处理而不会延迟。
关于c# - System.Timer 在单独的线程中流逝并保持线程限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515574/