私は、ユーザーが長時間実行するプロセスを要求している状況があります。私はコードビハインドの別のスレッドでそれを開始し、ユーザー "処理"にメッセージを返す予定です。それから数秒ごとにスレッドの状態を(非同期呼び出しによって)ポーリングします。スレッドが終了すると、成功メッセージが表示されます。ASP.NETは長時間実行されているスレッドでスレッドステータスをチェックしますか?
質問:元のリクエストが完了したら、スレッドをどのようにポーリングしますか?
私の知る限り、Pageオブジェクトは別のスレッドからスピンオフします。要求が完了すると、Pageオブジェクトはもはや存在しませんが、そのスレッドはどうですか?作成したスレッドのステータスを取得するにはどうすればよいですか?
私は元のリクエストに(リクエストID、ステータス)を格納するシングルトンクラスを作成します。スレッドはそのシングルトンクラスを使用してステータスを更新します。それ以降のリクエストでは、そのシングルトンクラスを介してステータスをチェックできます。あれは正しいですか? –
シングルトンは「現在の要求、ステータス」のコレクションを保存します。しかし、あなたはセッションオブジェクトを見て、それについて考えるのが良いかもしれません。フレームワーク内のセッションコンテナをシングルトンとして扱うだけで、まったく同じ原理です。あなたは自分のコンテナを使って、より明確に何が起こっているのかを見ることができます。 –
までクリーンアップ、私は "現在の要求、ステータス"のペアをユーザーから要求したとき、ステータスが "完了"のときにセッションから削除できます。しかし、私はまだユーザーが状況を要求しない状況を処理する方法を必要とします(ページを閉じたり閉じる)。そのクリーンアップを行うための標準的な方法はありますか? –