У меня есть веб-сайт MVC, где я пытаюсь вызвать метод с помощью async. Мой код выглядит следующим образом:
Просмотры
<a href="#" class="submit-download" data-id="24589">Submit Download</a>
$(document).on('click', '.submit-download', function (evt) {
var submit_url = '/SubmitDownloads/24589;
$.ajax({
type: 'POST',
url: submit_url,
success: function (data) {
if (data.Item1)
location.reload();
}
});
});
Контроллер
[HttpPost]
public async Task<JsonResult> SubmitDownloads(int id)
{
var respository = new WorkflowRepository();
var result = await respository.SubmitAsync(id);
return Json(result, JsonRequestBehavior.AllowGet);
}
Метод репозитория
//db service call which will take much longer time
public async Task<Tuple<bool, string>> SubmitAsync(id)
{
//long running method here
await Task.Delay(20000);
return new Tuple<bool, string>(true, "done with " + id);
}
Когда пользователь нажимает ссылку «Отправить загрузку» в представлениях, он выполняет всю функцию быстро, как и предполагалось, и страница становится отзывчивой, как прокручиваемая, меню отображается нормально. Но когда я нажимаю на любую ссылку на странице, она ожидает завершения всей операции (20 секунд), а затем перенаправляет на соответствующий URL-адрес.
Если я изменю Task.Delay на 50 секунд, нажатие ссылки займет 50 секунд для перенаправления.
Не могли бы вы рассказать мне, что мне здесь не хватает?