2012-01-28 67 views
1

我有一个网页带有一个按钮。当用户按下按钮时,他会收到当前时间的电子邮件。我需要在60秒异步后给他发送另一条消息.. [他仍然可以按下按钮多少次他想要]具有延迟c的异步函数#

我该怎么办?

+1

使用JavaScript的setTimeout函数执行另一个Ajax调用。 – Holystream 2012-01-28 07:48:41

+0

有没有办法在服务器端 – maggie 2012-01-28 07:55:09

+0

你怎么做取决于它是否发送第二封电子邮件的关键。如果服务器在60秒内重新启动,您是否仍然希望发送电子邮件,或者这无关紧要?如果电子邮件迟到了,它会影响吗?您是否宁愿不发送邮件而不是迟到? – 2012-01-28 09:15:51

回答

1

看它这里后就是答案

// Wait X Sec and then try to send message 
System.Timers.Timer t = new System.Timers.Timer(); 
t.Interval = Convert.ToDouble(ConfigurationManager.AppSettings["timer"]); 
t.Elapsed += delegate { /*your function here */}; 
t.Start(); 
t.AutoReset = false; // do it once 
0

您可以在客户端执行此操作,正如@Holystream所建议的那样,但如果用户在60秒内离开您的页面,则会失败,更不用说关闭浏览器了。

如果您不想创建自己的排队机制,则可以尝试使用Windows计划程序。只需创建一个任务,即可访问应用程序中将发送该电子邮件的URL。它与你一起工作的时候没有很多这样的要求,如果分钟不是绝对关键的(你可能会错过一点,调度程序不是为这样的分辨率设计的)。

0

您应该使用计划时间戳在DB中存储计划数据。

如果用户多次按下按钮,您可以在数据库中验证是否已存在标准的预定电子邮件而忽略它。

您需要设置Cron作业(计划程序)服务来调用您的页面,如果计划的时间已过,将从DB中的数据发送电子邮件。

根据您所需的准确性,您需要设置Cron Job发送电子邮件的时间较短。

如果你想设置自己的调度程序服务,一个好的C#库是http://csharp-source.net/open-source/job-schedulers/quartz-net

希望这会有所帮助。