SendMailAsync:在异步操作仍处于挂起状态时完成的异步模块或处理程序
使用SendMailAsync
我收到以下错误:
在异步操作仍处于挂起状态时完成异步模块或处理程序
我的代码:
public static async Task SendEmail(MessageContent messageContent, string emailBody) { SmtpClient smtpClientNoSend = new SmtpClient(); await smtpClientNoSend.SendMailAsync(mailMessage); }
从控制器呼叫:
public async System.Threading.Tasks.Task 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 Register() { await SendEmailAsync(); } private Task SendEmailAsync() { return SMTPEmail.SendEmailAsync(msg, output.ToString()); }
旁注 – 我不确定为什么你有这么多SendMail
方法,你可以将它们缩小到一个方法调用。
- 带有postfunction的MVC Html.ActionLink?
- 在单独的线程中执行Action以取消阻止UI
- entity framework4 TPHinheritance,如何将一种类型转换为另一种?
- FormsAuthentication Microst.AspNet.Identity.Owin.SignInManager.to之间的区别
- ASP.NET MVC:Tabs ASCX – 根据当前页面调整CSS类?
- System.Data.Entity中不存在Infrastucture
- 当控制器类在不同的程序集中时,如何将Controller注册到ASP.NET MVC中?
- 在编辑器模板中迭代集合时,NameFor会生成错误的名称
- 如何在单独的程序集中获取用户标识