ASP.Netアプリケーションでは、ユーザーがWebページのボタンをクリックすると、イベントハンドラーを介してサーバー上のオブジェクトがインスタンス化され、オブジェクトのメソッドが呼び出されます。メソッドは外部システムに移動して処理を実行しますが、これにはしばらく時間がかかる場合があります。したがって、私がやりたいのは、そのメソッド呼び出しを別のスレッドで実行して、「リクエストが送信されました」というメッセージでユーザーに制御を戻すことができるようにすることです。ユーザーがオブジェクトのステータスをポーリングし続けることができればさらに良いでしょうが、私はこれをファイアアンドフォーゲットとして行うことをかなり嬉しく思います。
私が知らないのは、ユーザーセッションが期限切れになっても、IISがスレッドの実行を継続できるかどうかです。ユーザーがイベントを起動し、サーバー上でオブジェクトをインスタンス化し、新しいスレッドでメソッドを起動するとします。ユーザーは「リクエストが送信されました」というメッセージに満足し、ブラウザを閉じます。最終的に、このユーザーセッションはIISでタイムアウトしますが、スレッドはまだ実行中であり、作業を行っている可能性があります。IISはスレッドの実行を継続できるようにしますか、それともユーザーセッションの期限が切れるとスレッドを強制終了してオブジェクトを破棄しますか?
編集:回答とコメントから、これを行う最善の方法は、実行時間の長い処理をIISの外部に移動することであると理解しています。他のすべてとは別に、これはappdomainリサイクルの問題を扱います。実際には、限られた時間でバージョン1をリリースする必要があり、既存のフレームワーク内で作業する必要があるため、サービスレイヤーを避けたいため、IIS内のスレッドを起動するだけで済みます。実際には、ここでの「長時間実行」は数分で、Webサイトの同時実行性は低くなるため、問題ないはずです。ただし、次のバージョンでは、別のサービスレイヤーに分割する必要があります。