何かがうまくいくからといって、それが正しいとは限りません。それで、私は次のコードについていくつかのフィードバックをお願いします。
ちょっとした歴史。ユーザーが私たちのサイトに登録し、スレッドがブロックされているという問題に遭遇したときに、電子メールを送信/キューに入れようとしていました。これは、コントローラーと関連するアクションメソッドがデフォルトで非同期ではなく同期であるという事実を考えると完全に理にかなっています。この問題を回避するために、私は次のことをまとめましたが、それが最善の方法かどうかはわかりません。
[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");
}