C# – SendMailAsync : An asynchronous module or handler completed while an asynchronous operation was still pending

asp.net-mvcasync-awaitcsmtpclienttask-parallel-library

While using SendMailAsync I am getting the following error:

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

My code :

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

Call From Controller:

public async System.Threading.Tasks.Task<ActionResult> Register()
{
   await SendEmail();
}

private void SendEmail()
{
  SMTPEmail.SendEmail(msg, output.ToString());
  return null;
}

Best Answer

Your call hierarchy is broken. You shouldn't use async void, that is ment for event handlers only, use async Task instead:

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());
}

Side note - I'm not sure why you have so many SendMail methods, You could narrow them down to a single method call.