ASP MVCアプリケーションから呼び出されてバックグラウンドで処理される必要があるSQLServer上のストアドプロシージャがある機能を実装しようとしています(別のストアドプロシージャをリモートで呼び出して、に保存されているExcelファイルを処理するために時間がかかる場合がありますサーバー)。ただし、UIが処理を待機してハングしないように、最後のHTTP要求の応答をクライアントに返す必要があります。
さまざまな方法を試しましたが、UIがすぐに応答しません。
私は試しましたBackgroundWorker
が、処理が完了するまでメインスレッドがクライアントに応答することを許可していません。また、次のことを試しました。
Thread.QueueUserWorkItem(delegate { //method which performs stored procedure calls//
});
それでも応答を返さHttpContext.Current
ず、バックグラウンドスレッドでは使用できません。
たぶん、バックグラウンド処理を開始し、メインスレッドがブラウザに応答を返すように一時停止してから、バックグラウンドスレッドを再開して、ストアドプロシージャ呼び出しですべての処理を行う方法がありますか?
私は何かが足りないのですか?
誰かが私がこの問題を解決する方法についてアイデアを教えてもらえますか?よろしくお願いします。
私が最終的に得たもので、私の場合は問題なく動作します。効率についてはよくわかりませんが、完全に機能します。したがって、ストアドプロシージャを呼び出すコードは別のスレッドに配置し、バックグラウンド呼び出しの処理が別のスレッドで行われている間にメインスレッドが終了し、しばらくすると正常に終了するようにします。同時にUIが利用可能であるため、ユーザーは同じ方法で処理される別のリクエストを行うことができます。3つのリクエストをテストしました。次々と重複しています。つまり、最初のリクエストがバックグラウンドで処理されている間に、別のリクエストを送信し、さらに別のリクエストを送信しました。UIはすぐに応答し、すべての作業が完了しました。
// ...main thread is working here
//put a call to stored procedure on a separate thread
Thread t = new Thread(()=> {
//call stored procedure which will run longer time since it calls another remote stored procedure and
//waits until it's done processing
});
t.Start();
// ...main thread continue to work here and finishes the request so it looks for user as the response is coming right away, all other stuff is being processed on that new thread so user even doesn't suspect
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加