C# 当异步操作仍挂起时,仍在完成获取异步模块或处理程序
我知道这个问题已经被问过了(),但我显然还是做错了什么,因为我仍然会遇到以下错误: 异步模块或处理程序在执行异步操作时完成 仍在等待 这是我的控制器的代码:C# 当异步操作仍挂起时,仍在完成获取异步模块或处理程序,c#,asp.net-mvc,asp.net-mvc-4,async-await,C#,Asp.net Mvc,Asp.net Mvc 4,Async Await,我知道这个问题已经被问过了(),但我显然还是做错了什么,因为我仍然会遇到以下错误: 异步模块或处理程序在执行异步操作时完成 仍在等待 这是我的控制器的代码: [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model) { if (ModelState.IsValid)
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindByNameAsync(model.Email);
if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
{
bool isApproved = IsOrganizationForMemberApproved(user);
if (!isApproved)
{
ModelState.AddModelError("", "Your organization has not been approved.");
return View(model);
}
// Don't reveal that the user does not exist or is not confirmed
return View("ForgotPasswordConfirmation");
}
await CustomEmailService.SendPasswordReset(this, UserManager, Request, user);
return RedirectToAction("ForgotPasswordConfirmation", "Account");
}
// If we got this far, something failed, redisplay form
return View(model);
}
最后是负责发送电子邮件的功能:
public async Task SendEmailAsync(string toEmailAddress,
toDisplayName, string subject, string htmlContent)
{
//... read settings
var message = new MailMessage();
message.To.Add(new MailAddress(toEmailAddress, toDisplayName));
message.From = new MailAddress(fromEmailAddress, fromDisplayName);
message.Subject = subject;
message.Body = htmlContent;
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
var credential = new NetworkCredential
{
UserName = smtpUserName,
Password = smtpPassword
};
smtp.Credentials = credential;
smtp.Host = smtpHost;
smtp.Port = Convert.ToInt32(smtpPort);
smtp.EnableSsl = Convert.ToBoolean(enableSsl);
await smtp.SendMailAsync(message);
}
}
我错过了什么?任何帮助都将不胜感激
谢谢。错误是什么?错误意味着某个地方有一个异步方法,您不需要等待。不确定在哪里,但如果在代码中搜索
async
关键字,应该不太难找到find@KevinGosse如果你看一下我发布的3个函数,它们都有async关键字。这就是它让我发疯的原因!奇怪的是,这种情况只会发生在不一致的情况下,只有在使用特定的smtp主机服务器名称时才会发生,而在与另一个smtp主机服务器名称一起使用时才不会发生。反正我会继续找的。谢谢
public async Task SendEmailAsync(string toEmailAddress,
toDisplayName, string subject, string htmlContent)
{
//... read settings
var message = new MailMessage();
message.To.Add(new MailAddress(toEmailAddress, toDisplayName));
message.From = new MailAddress(fromEmailAddress, fromDisplayName);
message.Subject = subject;
message.Body = htmlContent;
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
var credential = new NetworkCredential
{
UserName = smtpUserName,
Password = smtpPassword
};
smtp.Credentials = credential;
smtp.Host = smtpHost;
smtp.Port = Convert.ToInt32(smtpPort);
smtp.EnableSsl = Convert.ToBoolean(enableSsl);
await smtp.SendMailAsync(message);
}
}