限制并发调用的最佳实践
Best practice to throttle concurrent calls
我需要有关限制 asp.net MVC Web 应用程序中代码调用的最佳实践的建议。我们有一个 class 来处理一些涉及调用 Salesforce 的复杂工作,我们称它为 ComplexSfLogic.cs
。
Salesforce 一次有 10 个并发请求的限制,考虑到我们逻辑的复杂性和大量用户,我们正在提高这个限制。
lock()
可用于一次限制对资源 ala 1 的访问,但我想一次限制对 10 个资源的访问 - 本质上是在更多时限制对我的 class 的调用超过 10 个同时发生。
coding up a solution 我可以想出很多方法来处理这个问题,但是是否有最佳实践或现有的 .net class 可以像我描述的那样限制方法调用。我认为我最大的问题是我在搜索答案时没有使用正确的关键字,所以我很感激任何方向。
我见过 ServiceThrottlingBehavior
class 直接限制 WFC 调用,但我需要在我的 ComplexSfLogic.cs
class 上进行限制,因为 class 在某些情况下会进行多次调用,因此需要将它们组合在一起。谢谢!
使用 SemaphoreSlim
。它允许对临界区中的线程数设置限制。它还支持异步,如果许多线程可能正在等待和排队,这可能是个好主意。
您也可以将其用作负载断路器,如果您在 x 毫秒后(或立即)无法获取信号量,则操作失败。
我需要有关限制 asp.net MVC Web 应用程序中代码调用的最佳实践的建议。我们有一个 class 来处理一些涉及调用 Salesforce 的复杂工作,我们称它为 ComplexSfLogic.cs
。
Salesforce 一次有 10 个并发请求的限制,考虑到我们逻辑的复杂性和大量用户,我们正在提高这个限制。
lock()
可用于一次限制对资源 ala 1 的访问,但我想一次限制对 10 个资源的访问 - 本质上是在更多时限制对我的 class 的调用超过 10 个同时发生。
coding up a solution 我可以想出很多方法来处理这个问题,但是是否有最佳实践或现有的 .net class 可以像我描述的那样限制方法调用。我认为我最大的问题是我在搜索答案时没有使用正确的关键字,所以我很感激任何方向。
我见过 ServiceThrottlingBehavior
class 直接限制 WFC 调用,但我需要在我的 ComplexSfLogic.cs
class 上进行限制,因为 class 在某些情况下会进行多次调用,因此需要将它们组合在一起。谢谢!
使用 SemaphoreSlim
。它允许对临界区中的线程数设置限制。它还支持异步,如果许多线程可能正在等待和排队,这可能是个好主意。
您也可以将其用作负载断路器,如果您在 x 毫秒后(或立即)无法获取信号量,则操作失败。