@netcore

Как не дожидаться await в asp net core?

Допустим есть метод

public async Task<ActionResult> Like(int postId)
{
     //получаем id юзера из клеймов
    await _likeFacade.LikeAsync(UserId,postId, nameOf(News));
    return NoContent();
}


Не обязательно ждать когда метод LikeAsync закончит выполнение и вернется в текущий контекст. В фоне без await не могу записать лайк в базу, при return NoContent() все диспоузится. .ConfigureAwait(false) кажется тоже не отрабатывает как нужно. Метод контроллера все равно ожидает выполнение. Или я что то не так делаю и это плохая практика, при которой лучше дождаться выполнения и нормально вернуть 204?

UPD
Проблема решена, DI умирал после return NoContent(); Нужно было доставать из HttpAccessor его и обернуть в Task.Run + using
  • Вопрос задан
  • 332 просмотра
Пригласить эксперта
Ответы на вопрос 1
NYMEZIDE
@NYMEZIDE
резюме - ivanfilatov.ru
В фоне без await не могу записать лайк в базу, при return NoContent() все диспоузится.

поэтому надо или await писать или делать ручками GetAwaiter().GetResult();

Метод контроллера все равно ожидает выполнение.

все правильно, async/await это не распаралелливание выполнения кода.

Или я что то не так делаю и это плохая практика, при которой лучше дождаться выполнения и нормально вернуть 204

у вас все нормально написано. делается вызов, возвращается 204. никаких проблем быть не должно.

единственное - вы не ловите никакой exception в случае неудачи выполнения LikeAsync и не обрабатываете его.

почитайте еще про async/await, мне кажется вы не так понимаете эту концепцию
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы