c# - 发送邮件异步 : An asynchronous module or handler completed while an asynchronous operation was still pending

标签 c# asp.net-mvc async-await task-parallel-library smtpclient

在使用 SendMailAsync 时出现以下错误:

An asynchronous module or handler completed while an asynchronous operation was still pending

我的代码:

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

来自 Controller 的调用:

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 方法,你可以将它们缩小到单个方法调用。

关于c# - 发送邮件异步 : An asynchronous module or handler completed while an asynchronous operation was still pending,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30306596/

相关文章:

c# - 为什么标准 C# 事件调用模式是线程安全的,没有内存屏障或缓存失效?类似的代码呢?

c# - ASP.Net MVC。如何使用 Entity Framework 自动持久化关系数据?

javascript - 为什么在 JavaScript 函数体内调用 await 需要异步?

asynchronous - Haxe - 如何为 Flash 目标实现异步等待

c# - 在属性上触发事件/函数? (C#)

c# - 如何修复 "Could not load type ' System.Runtime.Remoting.Messaging.CallContext'"

c# - 如何在 ASP.NET MVC 4 中使用 Ninject 从 Web.config 绑定(bind)设置?

asp.net-mvc - 模型绑定(bind)器可以进行存储库查找吗?

javascript - 我可以将 async wait 与 firebase 数据库调用一起使用吗?

c# - 如何在 ConfigureServices 方法中使用 ASP.NET Core 2.1 读取用户环境变量?