如何限制每个时间的方法使用?

Iam*_*per 13 .net c#

它必须是微不足道的,但我无法通过它.我必须限制任务量(让我们说连接,发送电子邮件或点击按钮)的时间量.所以我可以每小时发送1000封电子邮件.

我怎么能在c#中做到这一点?我不知道也不关心每次操作需要多少时间.我只是想确保在最后一小时内只执行1000次.

Blu*_*kMN 19

 class EventLimiter
 {
    Queue<DateTime> requestTimes;
    int maxRequests;
    TimeSpan timeSpan;

    public EventLimiter(int maxRequests, TimeSpan timeSpan)
    {
        this.maxRequests = maxRequests;
        this.timeSpan = timeSpan;
        requestTimes = new Queue<DateTime>(maxRequests);
    }

    private void SynchronizeQueue()
    {
        while ((requestTimes.Count > 0) && (requestTimes.Peek().Add(timeSpan) < DateTime.UtcNow))
            requestTimes.Dequeue();
    }

    public bool CanRequestNow()
    {
        SynchronizeQueue();
        return requestTimes.Count < maxRequests;
    }

    public void EnqueueRequest()
    {
        while (!CanRequestNow())               
            Thread.Sleep(requestTimes.Peek().Add(timeSpan).Subtract(DateTime.UtcNow));
            // Was: System.Threading.Thread.Sleep(1000);

        requestTimes.Enqueue(DateTime.UtcNow);
    }
 }
Run Code Online (Sandbox Code Playgroud)

  • 大概你可以通过查看队列中的顶部项目以稍微更好的方式执行thread.sleep,以找出它何时到期,因为这将是下一次队列变小... (2认同)