У мене є цей метод у моєму контролері mvc:
public ActionResult BlaBla()
{
if (!ModelState.IsValid)
return new HttpNotFoundResult();
// ...
}
Я хочу створити його асинхронну версію. Отже, я думав змінити код так:
public async Task<ActionResult> BlaBla()
{
if (!ModelState.IsValid)
return new HttpNotFoundResult(); // Compiling error: this line is not working
// ...
}
Моє питання полягає в тому, як повернути коди помилок (404, 500, ...) з мого контролера mvc під час використання async Task<...>
стиль?
Відповіді:
3 для відповіді № 1Повинна бути мета при використанні async
дія, правда? Зазвичай ця мета полягає у виконанні операцій, пов'язаних з введенням / виведенням, таких як віддалені виклики TCP / HTTP, які піддаються за допомогою вашої асинхронної служби.
У цьому типова дія контролера виглядає так:
public async Task<ActionResult> BlaBla()
{
if (!ModelState.IsValid)
{
return new HttpNotFoundResult();
}
MyViewModel model = await myService.GetTheModel();
return View(model);
}
У цьому прикладі, оскільки ви вже чекали на async
Операція всередині методу вона буде скомпільована просто чудово. Якщо у вас їх немає async
операцій, тоді дуже мало сенсу мати async
дії. Це завдасть більше шкоди, ніж допоможе.Отже, запитання, яке ви повинні задати собі, таке: чи справді я маю деякі служби асинхронізації, які можуть скористатися перевагами порту завершення вводу-виводу, щоб виправдати свою потребу в застосуванні асинхронної дії?