2012-03-20 3 views
3

У меня есть веб-страница с кнопкой, которая генерирует некоторые файлы на пути к серверу. (Требуется от 5 до 20 минут). Я хочу создать задачу async, которая будет продолжать выполняться даже после закрытия пользователем браузера. Можно ли сделать это с помощью asp.net 4 и C#?Выполнить метод асинхронно в asp.net

+0

Другие вопросы: http://stackoverflow.com/search?q=asp.net + long + running + task –

+0

Это тот же вопрос, что и http://stackoverflow.com/questions/57845/backgroundworker-thread-in-asp-net – PinnyM

ответ

0

Или что я не понял, что вы хотите сделать, или что вам не нужно ничего делать.

После отправки запроса процесс запроса продолжается независимо от того, закрыт ли пользовательский браузер или нет. Вам не нужно, чтобы сделать вещь

Fabulous природа лиц без применения WEB ...

+0

Nice. но как заставить страницу не ждать, хочет ли пользователь выполнять другие действия на странице. – user194076

+0

@ пользователь194076. ajax-запросы. google _ "ajax tutorial" _ если это для вас ново. – gdoron

0

вы должны создать поток, который делает давно работает задачу

взглянуть на ниже:

http://kiranpatils.wordpress.com/2010/01/01/performing-a-long-running-task-with-asp-net/

в любом то, что вы начинаете на сервере он будет продолжать работать, даже если пользователь закрывает браузер (пока вы не перерабатывают приложение-пул или перезапустить веб-сервер).

+0

Эта статья 9 лет и не применяется к текущим стандартам разработки ASP.NET. –

+0

Это не меняет способ работы asp.net –

+0

Нет, это не так, но совет по разработке плох. С тех пор многое стало известно. –

0

Создание новой темы/использование пула потоков - это самый простой способ создания задач запуска.

Обратите внимание, что нет гарантий, что процесс останется в живых в течение продолжительной длительной задачи, поэтому будьте готовы к частичной частичной и ручной перезагрузке. То есть Перезапуск AppPoll из-за изменения конфигурации.

0

Самый простой способ - поставить задачу на ThreadPool. Нитки пула потоков останутся в живых даже после завершения веб-страницы. Код будет выглядеть так:

/* Beginning Method */ 
object someData = new object(); 
ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessAsync), someData); 
/* Ending Method */ 

static void ProcessAsync(Object stateInfo) 
{ 
    string dataToString = stateInfo.ToString(); 
} 
1

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

Существует несколько причин для этого, но одним из самых больших является то, что стандартная и рекомендуемая конфигурация для веб-серверов позволяет серверу убивать длительные запросы.

+0

Можете ли вы дать мне пример, как это сделать? или ссылку на действительный учебник. – user194076

+0

Создайте интерфейс в своем веб-решении, которое содержит методы, которые вы хотите открыть из своего веб-сервиса. Следуйте инструкциям [link] (http://www.codeproject.com/Articles/3990/Simple-Windows-Service-Sample) здесь, чтобы создать веб-сервис, реализующий интерфейс. Добавьте конечные точки службы [web] в свое веб-приложение, которое будет передано службе Windows. Я много глотаю; для этого потребуется немалая работа, но есть много учебных пособий по тому, как это сделать, вот как я научился в первый раз. –

1

Вы не контролируете пул потоков в приложении asp.net. Вы даже не можете гарантировать, что запрос будет завершен в том же потоке, с которого он начинался. Создание потоков использует тот же пул приложений, который использует веб-сервер, и вы можете использовать все потоки запросов, оставляя веб-сервер недоступным для обработки запросов.

Вы должны реализовать службу Windows, в которой размещается служба WCF, которую вы можете вызвать из своего веб-приложения. В этой службе вы можете запустить поток для обработки долгого процесса. В конце этого процесса вы можете обновить флаг состояния (например, от Обработка до Завершить), которую пользователь может просмотреть, чтобы определить, выполнены ли файлы.

Я бы порекомендовал использовать Topshelf для реализации вашего обслуживания Windows, это сэкономит вам много головной боли.

Смежные вопросы