我在页面上有两种方法。一个AddMessageToInboxOutbox(params [])和另一个SendNewMessageMail(params [])。
一旦用户向其他其他人发送消息,第一封消息就会添加到数据库中,然后发送给收件人的电子邮件。有时SMTP负载很重,从它获得答案需要5秒钟。我想使用其他线程或其他东西将SendNewMessageMail(params [])与异步调用一起包含起来。我从来没有这样做过。
如何在ASP.NET中执行此操作?
答案 0 :(得分:2)
您可以使用委托异步调用该方法:
delegate void SendMailAsync(params object[] args);
static void Main()
{
SendMailAsync del = new SendMailAsync(SendMail);
del.BeginInvoke(new object[] { "emailAddress" }, null, null);
}
static void SendMail(params object[] args)
{
// Send
}
这将使用ThreadPool
分配另一个线程。在我的例子中,我也没有注册回调。请注意,此回调(如果已指定)将放置在未知的ThreadPool
线程上。在代理引用EndInvoke
上调用del
将阻塞,直到完成。
EndInvoke
获取IAsyncResult
方法返回的BeginInvoke
对象,如果这样做,请保留对del
和IAsyncResult
的引用。此外,这不是ASP.NET特有的。
注意:多线程是一种强大的机制,也是一门深入学习的课程。将多线程与ASP.NET结合使用可能比WinForms应用程序更复杂 - 由于页面生命周期等问题。我建议你也要阅读多线程主题。
答案 1 :(得分:1)
或者,请查看ParamaterizedThreadStart