AsyncController: вмешательство, имеющее 2 асинхронных метода - PullRequest
1 голос
/ 08 июля 2011

У меня AsyncController, который имеет 2 AsyncMethods.Один называется GetMessages, другой Check.Кажется, что один вызов блокирует другой, вероятно потому, что оба вызывают this.AsyncManager.OutstandingOperations.Increment ();Они используют один и тот же AsyncManager?Как правильно это сделать?Должен ли я иметь 2 AsyncController, чтобы гарантировать, что они не получают друг друга?

Обновление: код обоих методов похож на код, размещенный здесь: Асинхронная операция завершается, но результат не отправляетсяв браузере

на самом деле это тот же контроллер, только добавлен Check / CheckCompleted.иногда «Проверка» должна запускаться так, чтобы «GetMessages» возвращала

Обновление 2: у меня есть ожидание 60 секунд для обоих методов.Я уменьшил один сейчас до 5, это помогает, но я думаю, что это просто взлом.

1 Ответ

1 голос
/ 08 июля 2011

Они не должны блокировать.Блокирование, которое вы наблюдаете, может быть связано с тем, что оба метода используют Session, а также потому, что Session не является потокобезопасным, ASP.NET блокирует доступ, если у вас есть два параллельных запроса из одного сеанса (например, запросы AJAX).

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

[SessionState(SessionStateBehavior.Disabled)]
...