Показать сообщение отдельно
  #1 (permalink)  
Старый 07.11.2015, 20:35
Новичок на форуме
Отправить личное сообщение для Naararouter Посмотреть профиль Найти все сообщения от Naararouter
 
Регистрация: 07.11.2015
Сообщений: 3

Web Worker и Ajax. Параллельное выполнение
Здравствуйте. Имеется: одна кнопка. При нажатии посылает ajax на сервер (C#), который делает следующее:
Код:
int test = (int)Session["test"]; //Читаю из сессии переменную
test++; //прибавляю к ней значение 1
Session["test"] = test; //возвращаю в сессию
Thread.Sleep(5000); //сплю ( предполагаемая долгая операция )
return Json(test,JsonRequestBehavior.AllowGet); //возвращаю результат, флаг аллоугет - для отладки.
Но когда нажимаю кнопку быстро 2 раза, то результат второго нажатия приходит только после первого. Т.е. следующим образом:
Цитата:
2015-11-08 00:23:46.098 (index):1183 Клик!
2015-11-08 00:23:51.139 (index):1187 1
2015-11-08 00:23:51.960 (index):1183 Клик!
2015-11-08 00:23:52.141 (index):1183 Клик!
2015-11-08 00:23:56.993 (index):1187 2
2015-11-08 00:24:01.998 (index):1187 3
Мне же необходим следующий результат ( какой логично бы и хотелось увидеть ):
Цитата:
2015-11-08 00:23:46.098 (index):1183 Клик!
2015-11-08 00:23:51.139 (index):1187 1
2015-11-08 00:23:51.960 (index):1183 Клик!
2015-11-08 00:23:52.141 (index):1183 Клик!
2015-11-08 00:23:56.993 (index):1187 2
2015-11-08 00:24:56.998 (index):1187 3
Но увы...перерыл множество гугл-ссылок начиная от создания так называемых Deferred-объектов, заканчивая Web Worker. Как понимаю, здесь необходимо реализация многопоточности, и вроде бы как последние (веб воркеры)дают эту возможность. Реализовал следующее:
$("#test-button1").click(function () {
            console.log("Клик!");
            var worker = new Worker('worker.js');

            worker.addEventListener('message', function(e) {
                console.log(e.data);
            }, false);

            worker.postMessage("start");
});

Worker.js:
self.addEventListener('message', function(e) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'Home/TestMethod', true);
    xhr.send();
    if (xhr.status != 200) {
        self.postMessage(xhr.status + ': ' + xhr.statusText );
    } else {
        self.postMessage(xhr.responseText);
    }
}, false);

Но, к сожалению, требуемый результат получить так и не удалось. Есть ли какие-либо идеи?
Ответить с цитированием