SendMailAsync:在异步操作仍在等待期间,一个异步模块或处理程序已完成。

10

在使用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;
}
1个回答

20

您的调用层次结构有问题。您不应该使用async void,这只适用于事件处理程序,请改用async Task

您的调用层次结构有问题。您不应该使用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方法,你可以将它们缩减为一个方法调用。


我不理解Register()方法。它不应该包括一个return语句吗? - RaelB
@RaelB 不是,这是一个返回Task的方法。它相当于从同步方法返回void - Yuval Itzchakov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接