Я читал асинхронную функцию/веб-страницы для ASP.NET 3.5 (мы пока не используем v4), но те, кого я видел, сосредоточены на выполнении фоновой задачи, но затем все еще вернулись, чтобы закончить и отправить ответ, после задача выполнена.ASP.NET (VB) Выполняет длинную функцию асинхронно, не блокируя нить страницы?
То, что я хочу сделать, это просто запустить фоновую задачу (в данном случае вызов веб-службы), но затем сразу же вернуть ответ браузеру - т.е. без ожидания завершения асинхронной задачи. Мне даже не нужно знать, успешно ли это или нет.
Каков наилучший способ сделать это? Я не могу найти примеры того, что вы могли бы назвать фоновой задачей «сирота» в ASP.NET.
Я думал о том, чтобы сделать это с помощью javascript Ajax-вызова на странице, которую я покажу пользователю, но информация, переданная веб-сервису, чувствительна, так что это не может быть и речи. Но это иллюстрирует то, что я хочу сделать.
[ed] Другая идея: Есть ли событие в модели ASP.NET, которое я могу использовать, которое происходит после ответ отправлен браузеру и соединение закрыто? то есть. Таким образом, больше обработки может произойти без ожидания пользователя?
Спасибо, не понял, что это было так просто. :) Однако, после изучения вариантов, я не понимаю разницу между a) 'Dim th As New Thread (New ThreadStart (Function() DoWork (param))),') 'Dim th As New Thread (DirectCast (Function() DoWork (param), ThreadStart)) 'и c)' ThreadPool.QueueUserWorkItem (Function() DoWork (param)) '. Все они, похоже, действуют одинаково. –
Если я понимаю все правильно, использование ThreadPool.QueueUserWorkItem плохо для ASP.NET, поскольку оно будет использовать потоки, предназначенные для обработки запросов, и загрузка их слишком сильно вызовет проблемы с вашим сайтом. Когда вы используете потоки, он не использует пул потоков ASP.NET, поэтому вы можете обрабатывать столько же запросов. Но, как сказал @ ss4526, лучше всего отделить вещи, но это совсем другая история :) Просто вместо MSMQ используйте WCF :) –