c# - System.Timer 在单独的线程中流逝并保持线程限制

标签 c# .net wcf timer threadpool

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

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

有没有办法执行我之前经过的事件?例如,通过设置在线程池上排队的优先级任务?还是在线程池之外发生了 Elapsed 事件?

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

最佳答案

如果您只需要限制线程数来保护拒绝服务攻击,那么这里更好的选择是限制 ServiceThrottlingBehaviormaxConcurrentCalls 属性。 查看详情 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/

相关文章:

c# - 向所有可用网卡广播 UDP 消息

c# - 请求参数不在 POST 请求中传输

azure - azure 中的证书( *.p12 , *.cert )- webjob

c# - (x, y).GetHashCode() 如何在幕后工作?

java - 使用 Metro 客户端缓冲传入的 SOAP 消息时出错

c# - 同一列中包含多个信息的 DataGridview

c# - 如何更改默认的自定义类输出

c# - 继续从 AWS Glacier Multipart Upload 获得 "Invalid Content-Range"响应

.net - 从 Windows C 函数返回字符串

c# - 您可以拆分一个 visual studio 项目 (c#) 并引用它吗?