Почему синхронное действие не было выполнено, пока не было выполнено асинхронное действие? - PullRequest
0 голосов
/ 29 ноября 2010

Я реализую Comet в ASP.NET MVC. Я использовал таймер для хранения асинхронного запроса на сервере. Асинхронный запрос завершится, когда таймер истечет через 1 минуту, и отправит ответ клиенту (чтобы избежать ошибки 404), а затем снова подключится к асинхронному контроллеру.

Я также хочу выполнить некоторые синхронные действия, пока выполняется асинхронный запрос, но проблема заключается в следующем:

  • Когда асинхронное действие было выполнено и удержано с использованием таймера, оно не вызывалось до тех пор, пока не завершилось асинхронное действие (запрос на долгосрочную обработку Comet) .

Я проводил тест с Firefox 3.6 много раз, но результат всегда один и тот же; это так странно Ты знаешь почему?

У меня есть подвопрос:

  • Для реализации Comet, используя таймер (ответ после истечения нескольких минут) или поток (ответ после нескольких спящих потоков), чтобы удерживать асинхронный запрос; что лучше?

1 Ответ

0 голосов
/ 29 ноября 2010

Я нашел ответ на свои проблемы.
Во-первых, причина, по которой Синхронизирующее действие не было выполнено, в то время как асинхронное действие удерживает , потому что Механизм блока запроса сеанса , запрос блока сеанса Asp.net, так что все запросы будут обрабатываться по одному вы используете параллельный запрос с Ajax Async Call. И решение состоит в том, чтобы отключить сессию на контроллере, для которого вы хотите провести долгоживущий запрос. Вот подробное объяснение: https://blogs.msdn.com/b/rickandy/archive/2009/12/17/session-less-mvc-controller.aspx
Во-вторых, при выполнении удержания запроса на длительный срок использование таймера и спящего потока НЕ ​​различаются, потому что пул потоков Asp.net по существу создаст новый поток для отслеживания прошедшего времени и обратного вызова вашего события истекшего таймера. Это уменьшит количество потоков для обслуживания запроса в пуле потоков, потому что он создал новый поток для отслеживания события таймера.

...