c# - 如何在同步 c# 中的 BeginInvoke 中设置限制发送请求每分钟
问题描述
我有一个来自 SMS 提供商的批量 SMS Soap WebService,此 Web 服务每分钟限制 300 个请求,如果我发送超过 300 个请求,我会收到限制错误我不知道如何在 BeginInvoke 处理请求所以我不要向 Web 服务发送请求超过 300 分钟。如何通过 Threading – 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 条短信,这很奇怪。第二种是使用队列。将您要发送的短信放入队列中,并按时间保留您发送的短信。然后您可以检查您是否没有通过从该队列弹出的限制并发送它。
推荐阅读
- ruby-on-rails - 如何在 WSL 环境中使用 better_errors 启动编辑器
- android - 检查 mp4 文件是否损坏或损坏颤动
- c++ - 如何允许 rand() 在
库生成超过 32767 的数字? - angular - 如何在每 10 秒后随机显示来自 api 的文本,并在 ANGULAR 中使用淡入和淡出动画?
- git - 如何将分支从开发变基到另一个从开发创建的新分支?
- reactjs - 否则反应类名
- javascript - 显示日期>当前日期的对象
- single-sign-on - 如何将 SSO 与大学整合?
- r - 在 R Markdown 中使用 ggplot 生成大图描述
- swift - 使用字符串键名获取属性值