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