指数延迟客户端API调用

时间:2018-04-12 21:58:20

标签: c# vb.net algorithm throttling timedelay

我正在与第三方API接口,该API返回一个呼叫限制阈值以及到目前为止我使用了多少次来自阈值的调用。我相信每分钟都有60个电话。 1分钟后重置。

我希望延迟我的API调用,因为我越来越多地达到该限制,有点像指数曲线,其中曲线在最大阈值处达到最大阈值的两倍。

所以在0时它是0延迟。在60岁时,这将延迟120秒。

如果他们更改了通话限制,我希望能够通过指数 - 排序曲线再次响应并将我的最大限制调整为2 *新限制。

我可以使用什么算法? (首选VB.NET,否则为C#)

1 个答案:

答案 0 :(得分:1)

你可以沿着这些方向做点什么,我们这样做是为了在相机离线或出错时不轰炸我们的邮件服务器。

public static class Delay
{
     public static double ByInterval(int maximum, int interval) => Math.Round((maximum / (Math.Pow(2, interval) - 1)), 0);
}

因此,例如,如果最大延迟应该是120,并且我们希望以3的间隔,则输出将是15。我也在四舍五入到一个整数。不确定这是否是您正在寻找的,但我们将其与一个appender相结合,因此我们存储电子邮件直到达到我们的阈值。例如,我们使用我们的值来等同于(10000000 * Delay.By(120, 3))的秒数。因为我们主要以刻度形式存储。