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;
}
您的调用层次被破坏了。您不应该使用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
方法,你可以把它们缩小到一个方法调用。