C# SendMailAsync:异步模块或处理程序在异步操作仍挂起时完成

C# SendMailAsync:异步模块或处理程序在异步操作仍挂起时完成,c#,asp.net-mvc,async-await,task-parallel-library,smtpclient,C#,Asp.net Mvc,Async Await,Task Parallel Library,Smtpclient,使用SendMailAsync时,我收到以下错误: 异步模块或处理程序在异步 行动仍在进行中 我的代码: public static async Task SendEmail(MessageContent messageContent, string emailBody) { SmtpClient smtpClientNoSend = new SmtpClient(); await smtpClientNoSend.SendMailAsync(mailMessage); } 来自控

使用
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;
}
public async System.Threading.Tasks.Task Register()
{
等待发送电子邮件();
}
私有void sendmail()
{
SMTPEmail.sendmail(msg,output.ToString());
返回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());
}
public静态任务sendmailasync(MessageContent-MessageContent,string-emailBody)
{
SmtpClient smtpClientNoSend=新的SmtpClient();
返回smtpClientNoSend.SendMailAsync(mailMessage);
}
公共异步任务寄存器()
{
等待SendEmailAsync();
}
私有任务SendEmailAsync()
{
返回SMTPEmail.sendmailasync(msg,output.ToString());
}

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

我不理解
Register()
方法。它是否应该包含一个
return
语句?@RaelB否,它是一个
Task
返回方法。它相当于从同步方法返回
void