asp.net より前の長い間、長いタスクがあるときは、タスクをページで実行し、ある種のフラッシュを使用して出力をユーザーに送信していました。個別のスレッドなどはありません。asp.net 以来、私は同じように長いタスクを実行してきました。出力をフラッシュするための response.flush を含む aspx ページがあります。これは私にとってはうまく機能しているようです(そして、数時間以上実行されるタスクがいくつかあります)が、これは悪いことだと読み続けていますが、なぜだろうか?あなたがこれをしないためにあなたに起こったいくつかの問題は何ですか?
1 に答える
ユーザーが、長いプロセスを実行しているページから誤って、または無意識のうちに移動したとします。これにより、中断が発生する可能性があり、ユーザーにパニックを引き起こし、ユーザーが再送信して別の長いプロセスを開始する可能性があります。
オンラインで銀行口座にアクセスする必要があり、長い時間がかかる財務レポートを作成したいとします。その場合、ページを開いたままにしておく必要があり、おそらくデスクから離れてしまうでしょう (たとえば)。プロセスの実行中に、誰かがあなたのデスクに行き、快適な椅子に飛び乗り、戻るボタンを押す可能性があります。彼らは、アカウントに 100 万ドルがあることを発見したばかりです。「ジョニー、今日はみんなのお弁当買ってるみたいだね!」
このようなケースを処理する標準的な方法は、特にあなたの状況では、Windows サービスに処理を任せることです。ページは、データベース、イベント ログ、またはその他の手段を通じて、プロセスの現在の状態を定期的に要求できます。これは、たとえば、実行に 5 分かかる可能性がある請求プロセスをユーザーが開始する場合に、私が取る一般的なアプローチです。ユーザーはページに再度アクセスして、準備ができているかどうかを確認できます。または、サービスはオプションで電子メールを開始したり、テキストを送信したりして、操作のステータスをユーザーに通知できます。