использование делегатов в ASP.NET для обработки асинхронных операций - PullRequest
5 голосов
/ 16 ноября 2011

При вызове BeginInvoke для делегата действие выполняется в отдельном потоке. При вызове в ASP.NET он использует рабочий поток CLR? Или он использует рабочий поток IIS?

Если последнее, то мне нужно будет использовать асинхронный шаблон ASP.NET, чтобы убедиться, что действие выполняется в рабочем потоке CLR. Но я бы не стал этого делать, если действие заканчивается там при BeginInvoke.

Ответы [ 3 ]

6 голосов
/ 16 ноября 2011

используется рабочий поток CLR.

как описано в здесь

Для начала ASP.NET использует пул потоков CLR для процесса для обслуживания запросов (дополнительную информацию о пуле потоков CLR см. В столбце .NET в этом выпуске).

EDIT:

другой ресурс этот блог

К сожалению, поток, используемый BeginInvoke, фактически взят из того же пула рабочих потоков, который используется ASP.Net для обработки запросов страниц

1 голос
/ 16 ноября 2011

Использование пользовательского делегата и вызов его метода BeginInvoke предлагают быстрый способ запуска рабочих потоков для вашего приложения.Но, к сожалению, они снижают общую производительность вашего приложения, поскольку они потребляют потоки из того же пула, который используется ASP.NET для обработки HTTP-запросов.

Просто запомните, если тогда важен обратный вызов из асинхронного метода,вам нужно заблокировать возврат основного потока клиенту до завершения асинхронного процесса.Если ведение журнала и аналитика являются вызовом метода «запусти и забудь», то все будет проще, и вы можете просто запустить метод и позволить серверу ответить клиенту.Однако, если обратный вызов важен и сервер завершил обработку, на сервере ничего не происходит для обработки обратного вызова после его завершения;это то, где асинхронная обработка на сервере для приложений ASP.NET отличается, скажем, от приложения WinForms.

1 голос
/ 16 ноября 2011

Использование / управление потоками немного отличается в IIS6, IIS7 и IIS 7.5.

Довольно подробно и обновленное объяснение здесь:

Использование потоков ASP.NET в IIS 7.5, IIS 7.0 и IIS 6.0

Не уверен, что это ответ на ваш вопрос, но в любом случае - хорошее чтение.

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