仅仅因为某事有效并不意味着它是正确的。所以我想对以下代码进行一些反馈。
一点历史;当用户在我们的网站上注册并遇到线程被阻止的问题时,我试图发送/排队电子邮件,考虑到默认情况下控制器和相关操作方法是同步而不是异步的事实,这完全有意义。为了解决这个问题,我将以下内容放在一起,但不确定这是否是最好的方法。
[HttpPost, AllowAnonymous]
public async Task<ActionResult> RegisterAsync(UserRegisterUserViewModel userRegisterUserViewModel)
{
if (ModelState.IsValid)
{
var user = new UserDto
{
UserName = userRegisterUserViewModel.UserName,
Password = userRegisterUserViewModel.Password,
AuthType = userRegisterUserViewModel.AuthType,
Active = 0
};
Guid userId = _userService.AddUser(user);
if (userId != Guid.Empty)
{
// Send Registration E-mail
await Task.Run(() => _userMailer.RegistrationConfirmation(user).SendAsync(),
new CancellationToken(false));
// Display Confirm View
return PartialView("_RegistrationConfirmation");
}
ModelState.AddModelError("UserName", "Unable to create account");
}
return PartialView("_Registration");
}