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
。