C# 如何设置同步c上BeginInvoke中每分钟发送请求的限制#

C# 如何设置同步c上BeginInvoke中每分钟发送请求的限制#,c#,asp.net,synchronization,C#,Asp.net,Synchronization,我有一个来自其中一个SMS提供商的批量SMS Soap web服务,该web服务每分钟限制300个请求,如果我发送的请求超过300个,我会收到一个限制错误,我不知道如何在BeginInvoke处理请求,所以我不会向web服务发送超过300分钟的请求。我如何通过线程–BeginInvoke在我的应用程序中实现此限制?我的应用程序是由C#Asp.net编写的 这是我向Oprator Webservice发送所有请求的部分代码: endCache.SetCacheItem("Success", 0);

我有一个来自其中一个SMS提供商的批量SMS Soap web服务,该web服务每分钟限制300个请求,如果我发送的请求超过300个,我会收到一个限制错误,我不知道如何在BeginInvoke处理请求,所以我不会向web服务发送超过300分钟的请求。我如何通过线程–BeginInvoke在我的应用程序中实现此限制?我的应用程序是由C#Asp.net编写的

这是我向Oprator Webservice发送所有请求的部分代码:

endCache.SetCacheItem("Success", 0);
                    SendCache.SetCacheItem("Failed", 0);
                    SendCache.SetCacheItem("Invalid", 0);


                    object[] obj = new object[] { MessageID, msgParts, smsPrice, to,from, isUnicode, body };
                    IAsyncResult ar = sendIt.BeginInvoke(sender, to, body, isFlash,ref opCode, MessageID.ToString(), new AsyncCallback(SendCallback), obj);

                    SendCache.SetCacheItem("Result", ar);

private void SendCallback(IAsyncResult ar)
{
    string[] opCode = null;

    SendCache.SetCacheItem("Result", ar);


    AsyncResult aResult = (AsyncResult)ar;
    SendSmsDelegate sendIt = (SendSmsDelegate)aResult.AsyncDelegate;
    byte[] retVal = null;


        retVal = sendIt.EndInvoke(ref opCode, ar);
        SendCache.SetCacheItem("Retval", retVal);




    object[] obj = (object[])ar.AsyncState;

    ComputeReceptions((long)obj[0], (int)obj[1], (double)obj[2], (string[])obj[3], retVal, opCode, (long[])obj[4], (int)obj[5], (int)obj[6], (bool)obj[7]);


}

谢谢你

有两种方法,第一种是一秒钟只发送5条短信,这很奇怪。第二种方法是使用队列。将你想发送的短信放入队列中,同时保留按时间发送的短信。
然后,您可以检查您是否未通过从该队列中弹出的限制并发送它。

感谢您的帮助,我可以发送300个请求,每个请求发送100条短信。您有其他解决方案吗?感谢您排队(sendingQueue),将您的短信放入发送队列,而不是直接发送短信。另一个进程读取sendingQueue并弹出消息并发送它。从sendingQueue读取的位置可以控制是否发送sms。你收到了吗?