Мы пошли по этому пути, и он действительно работал нормально, когда наше приложение было на одном сервере. Когда мы хотели масштабировать до нескольких машин (или использовать несколько w3wp в веб-гарнире), нам пришлось переоценить и посмотреть, как управлять рабочей очередью, обработкой ошибок, повторными попытками и сложной проблемой правильной блокировки, чтобы обеспечить только одну Сервер забирает следующий элемент.
... мы поняли, что мы не занимаемся написанием механизмов фоновой обработки, поэтому мы искали существующие решения и получили доступ к удивительному проекту OSS hangfire
Сергей Одиноков создал настоящую жемчужину, с которой действительно легко начать работу, и позволяет вам поменять бэкэнд того, как работа сохраняется и ставится в очередь. Hangfire использует фоновые потоки, но сохраняет задания, обрабатывает повторы и дает видимость рабочей очереди. Таким образом, рабочие места Hangfire надежны и выдерживают все капризы перерабатываемых доменов приложений и т. Д.
Базовая настройка использует сервер SQL в качестве хранилища, но вы можете поменять его на Redis или MSMQ, когда его время будет увеличиваться. Он также имеет отличный пользовательский интерфейс для визуализации всех заданий и их состояния, а также позволяет повторно ставить задания в очередь.
Моя точка зрения заключается в том, что, хотя в фоновом потоке вполне возможно делать то, что вы хотите, существует много работы, чтобы сделать его масштабируемым и надежным. Это хорошо для простых рабочих нагрузок, но когда все усложняется, я предпочитаю использовать специально созданную библиотеку, а не проходить через это усилие.
Чтобы узнать больше о доступных опциях, загляните в блог Скотта Хансельмана , в котором описаны несколько вариантов обработки фоновых заданий в asp.net. (Он дал светящийся обзор Hangfire)
Также, на что ссылается Джон, стоит прочесть блог Фила Хаака о том, почему такой подход проблематичен, и о том, как изящно прекратить работу над потоком, когда домен приложения выгружен.