|
WebForms Timer повторные вызовы
|
|||
---|---|---|---|
#18+
Доброго дня! Сделал проект на WebForms, работает всё как нужно, кроме одного: при отладке проскочил один бажок. 1) Добавляем таймер на страницу и выключаем его Код: plaintext 1.
2) При нажатии на кнопку, запоминаем в сессии объект с которым сейчас работаем и включаем таймер Код: vbnet 1. 2.
3) На странице процедура таймера выглядит примерно так. Если событие отработало, проверяем, что действительно нам передали задание, тогда выполняем некий запрос в базу (достаточно быстрый). Через секунд 5-30 (около 5 событий/повторов таймера) мы получим результат и тогда очистим объект в сессии и выключим таймер, а пользователю отобразим результат Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Такой кейс работает хорошо, когда запрос выполняется быстро (меньше размера интервала таймера). Если же интервал выставить в 1 секунду в моём проекте (изменим в примере на Sleep(5000)), тогда произойдёт следующее: будет вызвана загрузка страницы, браузер ждёт, код в странице пытается задизеблить таймер и вернуть страницу браузеру. Но со стороны браузера, видимо JS (тот который таймер) формирует очередь из вызовов, и получается после загрузки страницы в браузере, вызывается опять событие таймера (приходит на страницу VIEWSTATE где таймер включен) и эта балалайка теперь периодически обновляет страницу. Из-за этого результат который был показан на прошлом шаге, мы очистили, думая что пришло новое задание от пользователя. Как этого избежать? Даже так: как заставить таймер выполнить 1 раз постбек на сервер и ждать пока браузеу вернётся страница? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 17:00 |
|
|
start [/forum/topic.php?fid=18&fpage=7&tid=1354684]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
others: | 263ms |
total: | 373ms |
0 / 0 |