2017-03-22 42 views
0

说明:异步模块或处理程序完成,而异步操作仍然悬而未决

我送从MVC应用程序的电子邮件,邮件被successfuly当我把它发送给一个人发,但是当我送邮件给多人,然后得到一个例外,即操作超时。

因此,为了避免这个问题我试图使用smtpclient.SendAsync(消息,对象)方法,但我发现异常即而异步操作仍有待完成的异步模块或处理程序。

如何解决此问题?

代码:

public async Task<string> SendEmail(List<string> ToEmailAddresses,string body, string emailSubject) 
     { 


      var smtp = new SmtpClient 
      { 
       DeliveryMethod = SmtpDeliveryMethod.Network, 
       Host = "xyz-host-name", 
       Port = 25, 
       EnableSsl = false, 
       Timeout = 600000 
      }; 

      var fromAddress = new MailAddress(ConfigurationManager.AppSettings["MailUserName"], "Rewards and Recognition Team"); 

      using (var message = new MailMessage() { Subject = emailSubject, Body = body }) 
      { 
       message.From = fromAddress; 

       foreach (string email in ToEmailAddresses) 
       { 
        message.To.Add(email); 
       } 
       message.IsBodyHtml = true; 
       try 
       { 
        _logger.Log("EmailService-SendEmail-try"); 
        object userToken = message; 
        smtp.SendAsync(message,userToken); 
        return "Success"; 
       } 
       catch (Exception ex) 
       { 
        _logger.Log("EmailService-SendEmail-" + ex.Message); 
        return "Error"; 
       } 
      } 
     } 

回答

1

,你必须使用的ActionResult的关键字的await(控制端)

public async task<ActionResult> SendMail(object obj) 

{ 
var result = await SendEmail(ToEmailAddresses,body,emailSubject) 
return result 
} 
相关问题