SendMailAsync:异步模块或处理程序在异步操作尚未完成时完成

本文关键字:异步操作 未完成 完成时 程序 异步 模块 处理 SendMailAsync | 更新日期: 2023-09-27 17:49:31

使用SendMailAsync时,我得到以下错误:

在异步过程中完成的异步模块或处理程序操作仍未完成

我的代码:
public static async Task SendEmail(MessageContent messageContent, string emailBody)
{
   SmtpClient smtpClientNoSend = new SmtpClient();
   await smtpClientNoSend.SendMailAsync(mailMessage);
}

来自控制器的调用:

public async System.Threading.Tasks.Task<ActionResult> Register()
{
   await SendEmail();
}
private void SendEmail()
{
  SMTPEmail.SendEmail(msg, output.ToString());
  return null;
}

SendMailAsync:异步模块或处理程序在异步操作尚未完成时完成

您的调用层次被破坏了。您不应该使用async void,这是只用于事件处理程序,使用async Task代替:

public static Task SendEmailAsync(MessageContent messageContent, string emailBody)
{
   SmtpClient smtpClientNoSend = new SmtpClient();
   return smtpClientNoSend.SendMailAsync(mailMessage);
}
public async Task<ActionResult> Register()
{
   await SendEmailAsync();
}
private Task SendEmailAsync()
{
   return SMTPEmail.SendEmailAsync(msg, output.ToString());
}

旁注-我不知道为什么你有这么多的SendMail方法,你可以把它们缩小到一个方法调用。