之前我发布了一个关于多线程的问题。实际上我的意图是通过使用 c# 和 asp.net 应用程序在同一时间点(例如:凌晨 12:00 整)为 1000(或更多)人发送短信。选择多线程概念来实现这一点是否可以?
最佳答案
这个概念不需要多线程...
这个概念更像是一个任务管理器/Cron Job
- 创建一个 ASPX 脚本来查看时间并执行您需要的方法
- 将任务管理器设置为每 xx 分钟运行一次此脚本
- 创建一个方法,获取人员列表并通过 SMS API 发送 SMS,然后调用它,例如。 SendSMSFromList(列出用户列表,字符串消息){}
- 现在设置所有内容,您可以在需要时随时运行它(只需在 ASPX 脚本中设置)
如果您需要任何代码,请随时告诉我。
编辑所有步骤
如果您有托管解决方案,在您的托管控制面板中,您可以将任务计划设置为每 n 分钟运行一次脚本页面,如果是这样,请跳过后续步骤.另一方面,如果您正在运行自己的服务器 (IIS),那么请先执行此操作。
- 从 this location 安装适用于 Windows 的 cUrl并将 curl.exe 添加到 C:\WINDOWS
- 打开任务管理器(在 win7 上,控制面板 > 管理工具 > 任务计划程序)
- 创建一个新任务like this
- 运行命令
有了这个,您只需将系统配置为运行一个文件,就像您在浏览器中执行该链接一样,它将每 15 分钟运行一次。
现在我们需要创建 taskManager.aspx 文件
public partial class taskManager : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DateTime dt = DateTime.Now;
// Run after midnight
if (dt.Hour == 0 && dt.Minute <= 15)
{
Write2Log("Schedule Job Started", LogType.INFO);
SendSMSFromList(
GetUsersList(),
GetSMSMessage());
Write2Log("Schedule Job Finished", LogType.INFO);
}
}
private string GetSMSMessage()
{
// Fetch the text from DB...
return "This is the message content that I will send as SMS";
}
private List<string> GetUsersList()
{
// fetch the list form DB...
return new List<string>();
}
private void SendSMSFromList(List<string> usersList, string message)
{
// send SMS's
foreach (string phoneNr in usersList)
{
// send message
mySMSAPI.Send(phoneNr, message);
}
}
private void Write2Log(string text, LogType type)
{
// Log to a file what's going on...
try
{
string filename = HttpContext.Current.Server.MapPath("") + "\\status.log";
using (StreamWriter sw = new StreamWriter(filename, true)) // open to append
{
// example: 2008-12-17 13:53:10,462 INFO - Schedule Job Finished
string write = String.Format("{0} {1} - {2}",
DateTime.Now,
type.ToString(),
text);
sw.WriteLine(write);
}
}
catch (Exception)
{ }
}
private enum LogType
{ INFO, WARNING, ERROR }
}
完成...
为了示例,我将所有内容都放在一个文件中,你应该把东西分开......但我想要的是向你展示它的原理。
关于c# - 在同一时间发送短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1606127/