簡體   English   中英

每秒C#限制呼叫

[英]C# Limit Calls Per Second

我正在呼叫僅允許10次呼叫的服務。 我正在使用Stopwatch和Thread.Sleep限制通話。 這些是該工作的正確工具,還是我應該使用計時器或其他工具?

     public void SomeFunction() {
        Stopwatch stopwatch = new Stopwatch();
        int numCallsThisSecond = 0;

        foreach(MyEvent changedEvent in changedEvents) {
            stopwatch.Start();

            service.ChangeEvent(changedEvent);

            numCallsThisSecond += 1;
            stopwatch.Stop();
            if(numCallsThisSecond==10 && stopwatch.ElapsedMilliseconds<=1000)
                Thread.Sleep((int)(1100-stopwatch.ElapsedMilliseconds));
            if(stopwatch.ElapsedMilliseconds>1000) {
                stopwatch.Reset();
                numCallsThisSecond = 0;
            }
        }
    }

預先感謝您的任何幫助!

如您所知,它可以是10個呼叫/秒。 代碼可以很簡單,如下所示:

    public void SomeFunction() 
    {
        foreach(MyEvent changedEvent in changedEvents) 
        {
            service.ChangeEvent(changedEvent);
            Thread.Sleep(100);//you already know it can be only 10 calls / sec
        }
    }

編輯:好的,請查看以下替代方法是否會有所幫助,它每秒僅允許10次或更少的呼叫,具體取決於其性能:

    public void SomeFunction() 
    {
        DateTime lastRunTime = DateTime.MinValue;

        foreach(MyEvent changedEvent in changedEvents) 
        {
            lastRunTime = DateTime.Now;
            for (int index = 0; index < 10; index++)
            {
                if (lastRunTime.Second == DateTime.Now.Second)
                {
                    service.ChangeEvent(changedEvent);
                }
                else
                {
                    break;//it took longer than 1 sec for 10 calls, so break for next second
                }
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM