【发布时间】:2022-03-13 09:12:37
【问题描述】:
我正在使用简洁的RateGate class 来限制我发送到服务器的请求数。
我的代码如下所示:
var RateLimit = 35;
using(var RateGate = new RateGate(RateLimit, TimeSpan.FromSeconds(1)))
{
for(var Run = 1; Run <= 50; Run++)
{
for(var Batch = 0; Batch < 200; Batch++)
{
// Do some work, then...
MyClass MyClass;
if(MyClass.RateLimitHit)
{
RateLimit--;
}
RateGate.WaitToProceed();
}
}
}
在if(MyClass.RateLimitHit) 内部,我需要将速率限制降低1。不仅仅是变量RateLimit,而是实际RateGate 中运行的限制。
在 RateGate 类中,我看到了这个:
/// <summary>
/// Number of occurrences allowed per unit of time.
/// </summary>
public int Occurrences { get; private set; }
我的问题是:如果我将 private set; 更改为 set; 并在 RateLimit--; 之后添加 RateGate.Occurrences = RateLimit; 这会达到我想要的效果吗?
我试过了,但看起来RateGate 继续以 35/s 的最大速率执行。
【问题讨论】:
-
澄清一下...为了赏金,您是在寻找修改后的 RateGate 类,还是从 RateGate 类继承和覆盖/扩展某些功能的新类?
标签: c# .net rate-limiting rategate