Что такое AsyncManager.OutstandingOperations? - PullRequest
9 голосов
/ 21 марта 2012

Благодаря MSDN они ничего не объясняют:

http://msdn.microsoft.com/en-us/library/system.web.mvc.async.asyncmanager.outstandingoperations(v=vs.108).aspx

Может кто-нибудь объяснить AsyncManager.OutstandingOperations простым примером?

Ответы [ 2 ]

8 голосов
/ 21 марта 2012

Это счетчик, который вы должны увеличивать в начале каждой асинхронной операции и уменьшать в конце.Вы должны убедиться, что уменьшить его, даже если операции не удаются.Значение этого счетчика всегда должно быть равно нулю, когда вся обработка завершена.

Вот статья, иллюстрирующая асинхронные контроллеры в ASP.NET MVC: http://msdn.microsoft.com/en-us/library/ee728598(v=vs.100).aspx

2 голосов
/ 10 октября 2012

Насколько я понимаю, это замена веб-форм '1001 * в мире MVC, чтобы гарантировать, что поток, обрабатывающий запрос, будет ожидать завершения всех асинхронных операций, прежде чем вернуться.Рассмотрим следующий код:

public ViewResult Index() { 
    Task.Factory.StartNew(() => {  // web service call here
    });
    return View();
}

Index() работает в основном потоке (запрос http).StartNew() будет извлекать поток из ThreadPool, который запускает на нем делегат вызова веб-службы, и немедленно возвращается в основной поток.Основной поток немедленно возвращает (представление) и заканчивает обработку запроса (где-то в стеке во время выполнения ASP.NET).Но второй поток все еще работает (скорее всего, ожидает завершения ввода-вывода), но это не имеет смысла - никто не ждет, пока он потребит свой результат.формы.Он хранит внутренний счетчик всех ожидающих асинхронных вызовов и ждет всех из них, прежде чем вернуться из основного потока (т. Е. Счетчик уменьшается до нуля).AsyncManager делает то же самое, но вы увеличиваете / уменьшаете счетчик вручную.Если вам интересна концепция SynchronizationContext (это не так просто понять), я бы порекомендовал серию статей Майка Переца . Этот также будет очень полезен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...