In einer ASP.Net-Anwendung klickt der Benutzer auf eine Schaltfläche auf der Webseite. Dadurch wird ein Objekt auf dem Server über den Ereignishandler instanziiert und eine Methode für das Objekt aufgerufen. Die Methode geht zu einem externen System, um Dinge zu erledigen, und dies kann eine Weile dauern. Ich möchte diesen Methodenaufruf also in einem anderen Thread ausführen, damit ich dem Benutzer mit "Ihre Anfrage wurde gesendet" die Kontrolle zurückgeben kann. Ich bin einigermaßen glücklich, dies als Feuer und Vergessen zu tun, obwohl es noch schöner wäre, wenn der Benutzer das Objekt weiterhin nach dem Status abfragen könnte.
Was ich nicht weiß, ist, ob IIS zulässt, dass mein Thread weiter ausgeführt wird, selbst wenn die Benutzersitzung abläuft. Stellen Sie sich vor, der Benutzer löst das Ereignis aus und wir instanziieren das Objekt auf dem Server und lösen die Methode in einem neuen Thread aus. Der Benutzer ist mit der Meldung "Ihre Anfrage wurde gesendet" zufrieden und schließt seinen Browser. Letztendlich läuft diese Benutzersitzung auf IIS ab, aber der Thread wird möglicherweise noch ausgeführt und erledigt die Arbeit. Erlaubt IIS, dass der Thread weiter ausgeführt wird, oder beendet er ihn und entsorgt das Objekt, sobald die Benutzersitzung abläuft?
BEARBEITEN: Aus den Antworten und Kommentaren geht hervor, dass der beste Weg, dies zu tun, darin besteht, die lang laufende Verarbeitung außerhalb von IIS zu verschieben. Dies betrifft neben allem anderen das Problem des Appdomain-Recyclings. In der Praxis muss ich Version 1 in begrenzter Zeit auf den Markt bringen und innerhalb eines vorhandenen Frameworks arbeiten. Daher möchte ich die Service-Schicht vermeiden, daher der Wunsch, den Thread in IIS einfach abzufeuern. In der Praxis dauert "lange laufen" hier nur wenige Minuten und die Parallelität auf der Website ist gering, daher sollte es in Ordnung sein. Die nächste Version muss jedoch definitiv in eine separate Service-Schicht aufgeteilt werden.