使用异步方法asp.net?

时间:2010-07-15 07:22:16

标签: c# asp.net vb.net

我在页面上有两种方法。一个AddMessageToInboxOutbox(params [])和另一个SendNewMessageMail(params [])。

一旦用户向其他其他人发送消息,第一封消息就会添加到数据库中,然后发送给收件人的电子邮件。有时SMTP负载很重,从它获得答案需要5秒钟。我想使用其他线程或其他东西将SendNewMessageMail(params [])与异步调用一起包含起来。我从来没有这样做过。

如何在ASP.NET中执行此操作?

2 个答案:

答案 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对象,如果这样做,请保留对delIAsyncResult的引用。此外,这不是ASP.NET特有的。

注意:多线程是一种强大的机制,也是一门深入学习的课程。将多线程与ASP.NET结合使用可能比WinForms应用程序更复杂 - 由于页面生命周期等问题。我建议你也要阅读多线程主题。

答案 1 :(得分:1)

或者,请查看ParamaterizedThreadStart