c#asp.net从静态同步调用异步方法

时间:2015-06-19 18:18:28

标签: c# asp.net ajax asynchronous sendmail

我从ajax

调用一个名为 - validSendPass的静态方法
[WebMethod]
public static string validSendPass(string em)

在这种方法中,我需要创建电子邮件类并调用发送异步电子邮件的方法

classes.email ems = new classes.email();
ems.sendPassword(myemail, my email name, user email, user name, password, "Your password", pas);

此方法:

var fromAddress = new MailAddress(fromem, fromname);
var toAddress = new MailAddress(toem, toname);

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
    Timeout = 20000
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    try { smtp.Send(message); }
    catch { }
}

为此,我将smtp.Send替换为smtp.SendMailAsync或smtp SendAsync,添加异步。

我如何更改此代码 - 从静态方法调用异步方法?

1 个答案:

答案 0 :(得分:2)

不能。你问的是如何同步调用异步方法。如果你使它同步,则它不再是异步的

您可以阻止该方法,直到异步操作完成,但如果您这样做,那么您将首先打败使该方法异步的整个目的。

如果你真的需要最终结果是同步的,只需将所有内容从上到下保持同步,并且不要在任何地方使用任何异步方法。如果您要使用异步,则需要使所有异步,一直向上,以获得任何好处。