之前我发布了一个关于多线程的问题。实际上我的意图是通过使用c#和asp.net应用程序在同一时间点(例如:凌晨12:00)向1000(或更多)人发送短信。可以选择多线程概念来实现这一目标吗?
答案 0 :(得分:6)
这个概念不需要多线程......
这个概念更像是一个任务管理器/ Cron工作
如果您需要任何代码,请随时告诉我。
已修改
如果您有托管解决方案,则在您的主机控制面板中,您可以设置为任务计划,您可以设置为每n分钟运行一次脚本页面,如果是这样,请通过后续步骤。另一方面,如果您正在运行自己的服务器(IIS),请先执行此操作。
通过这种方式,您只需将系统配置为运行文件,就像在浏览器中执行该链接一样,每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 }
}
完成...
为了这个例子,我只用一个文件制作了所有东西,你应该把事情分开......但我所追求的是向你展示它的原理。
答案 1 :(得分:2)
取决于实际发送短信的方式。如果您让我们说一个发送短信的网络服务,您最终会在一次查询1000次,这将无法解决您的问题。
要实现这一目标,您需要确保发送任务可以同时完成。
编辑:
此外,我同意,根据你的系统,这些线程数量不会很健康。
EDIT2: 这需要多么尖锐?假设hh:mm就够了,你可以发送60秒 你的约1000短信。这意味着您需要每秒发送aprox 17 SMS。如果你分享 这让我们说4个线程然后你只需要确保你的发送过程/ 设备可以发送4个短信/秒。这应该是可以实现的。
HTH
答案 2 :(得分:2)
我不知道你是怎么发短信的。但几乎所有大型短信服务提供商都允许您在1秒内发送1000 所以,除非你真的真的真的非常需要立即发送所有内容,我建议你做一个循环,然后将信息发送给服务提供商。
答案 3 :(得分:1)
我不认为这对你有用,并且不建议创建如此多的线程。
另请参阅此链接
maximum-number-of-threads-in-a-net-app
SMS应用程序是否允许发送给多个人?或者可以在各种盒子上使用不同的服务来发送这些短信子集。但我认为一次发送这样的音量很难。
答案 4 :(得分:0)
我怀疑你会遇到一些传输问题,在那个时候假设它是一个实时的过程,会把这么多的数据提供给你的SMS提供商。
我找到一个能够进行预定发送的提供商,然后将消息排队,以便在我的闲暇时间在凌晨12点发送。