【问题标题】:c# asp.net call async method from static syncc# asp.net 从静态同步调用异步方法
【发布时间】:2015-06-19 18:18:27
【问题描述】:

我从 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,添加异步。

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

【问题讨论】:

    标签: c# asp.net ajax asynchronous sendmail


    【解决方案1】:

    不能。您在问如何同步调用异步方法。如果你让它同步,那么它不再是异步的

    您可以在异步操作完成之前阻塞该方法,但如果您这样做,那么您将首先破坏使该方法异步的全部目的。

    如果你真的需要最终结果是同步的,只要让一切从上到下保持同步,不要在任何地方使用任何异步方法。如果您要使用异步,则需要使 一切 一直异步,以便获得任何好处。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多