W aplikacji ASP.Net użytkownik klika przycisk na stronie internetowej, a następnie tworzy instancję obiektu na serwerze za pośrednictwem modułu obsługi zdarzeń i wywołuje metodę na obiekcie. Metoda przechodzi do systemu zewnętrznego w celu wykonania pewnych czynności i może to chwilę potrwać. Chciałbym więc uruchomić to wywołanie metody w innym wątku, abym mógł zwrócić kontrolę użytkownikowi z komunikatem „Twoje żądanie zostało przesłane”. Jestem dość szczęśliwy, że mogę to zrobić jako odpal i zapomnij, chociaż byłoby jeszcze przyjemniej, gdyby użytkownik mógł nadal odpytywać obiekt pod kątem statusu.
Nie wiem, czy IIS zezwala na działanie mojego wątku, nawet po wygaśnięciu sesji użytkownika. Wyobraź sobie, że użytkownik uruchamia zdarzenie, a my tworzymy instancję obiektu na serwerze i uruchamiamy metodę w nowym wątku. Użytkownik jest zadowolony z komunikatu „Twoja prośba została przesłana” i zamyka przeglądarkę. W końcu ta sesja użytkownika wygaśnie w usługach IIS, ale wątek może nadal działać, wykonując pracę. Czy usługi IIS pozwolą na kontynuowanie działania wątku, czy też zabiją go i pozbędą się obiektu po wygaśnięciu sesji użytkownika?
EDYCJA: Z odpowiedzi i komentarzy wynika, że najlepszym sposobem na to jest przeniesienie długotrwałego przetwarzania poza usługi IIS. Oprócz wszystkiego innego dotyczy to problemu recyklingu domeny aplikacji. W praktyce potrzebuję uruchomić wersję 1 w ograniczonym czasie i muszę pracować w istniejącym frameworku, więc chciałbym uniknąć warstwy usług, stąd chęć po prostu odpalenia wątku wewnątrz IIS. W praktyce „długotrwałe” to tylko kilka minut, a współbieżność na stronie będzie niska, więc powinno być w porządku. Ale następna wersja z pewnością będzie wymagała podzielenia na osobną warstwę usług.