Planet_93
@Planet_93

Как реализовать асинхронное выполнение запросов в ASP .NET MVC 5?

Добрый день!

С помощью таймера, каждую секунду посылаю запрос и получаю тестовое значение. И параллельно ему отправляю другой запрос, который получаю через 10 секунд.

Клиентская часть:

var timerId;

        function startTimer() {
            timerId = setInterval(() => {
                //Запрос на получение значения прогресса
                axios.post("/Uploader/GetProgress", null).then(resp => {
                    console.log(resp.data);
                });
            }, 1000);
            
            axios.post("/Uploader/AcceptForecast", null).then(resp => {
                console.log(resp.data.Message);
            });

        }


Сервер (ASP .NET C#) :
public class UploaderController : Controller{
private static int itr = 0;
        public JsonResult AcceptForecast()
        {
//Задержка 10 сек
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(1000);
            }
            return Json(new { Message = "Сообщение отправлено" });
        }

        [HttpPost]
        public JsonResult GetProgress()
        {
            itr++;
            return Json(itr);
        }
}


В результате получается следующий результат, что запросы в таймере ждут пока вернется callback от запроса '/Uploader/AcceptForecast'

5c5bf570507ba605660025.jpeg

Подскажите пожалуйста, как сделать так, чтобы запросы выполнялись параллельно друг другу?

Реальная задача заключается в том, что я буду записывать данные в базу и хочу получать степень выполнения записи.

Если не отправлять запрос на прогресс, то работает всё хорошо.
var timerId;
        var itr = 0;
        function startTimer() {
            timerId = setInterval(() => {
                itr++;
                console.log(itr);
            }, 1000);
            
            axios.post("/Uploader/AcceptForecast", null).then(resp => {
                console.log(resp.data.Message);
            });
        }
        startTimer();

Результат:
5c5bfd1c0366b019443526.jpeg

Было выявлено что на клиенте запросы посылаются асинхронно, а с сервера они отправляются по очереди.
  • Вопрос задан
  • 438 просмотров
Решения вопроса 1
Planet_93
@Planet_93 Автор вопроса
Нашел ответ своей проблеме. На сервере, если запросы пришли во время одной сессии, то они встают в очередь.

Подробности: tech-journals.com/jonow/2011/10/22/the-downsides-o...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
tsepen
@tsepen
Frontend developer
Можно использовать axios all для выполнения сразу нескольких запросов. Пример

function getUserAccount() {
  return axios.get('/user/12345');
}

function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}

axios.all([getUserAccount(), getUserPermissions()])
  .then(axios.spread(function (acct, perms) {
    // Both requests are now complete
  }));
Ответ написан
Ваш ответ на вопрос

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

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