2011-01-27 11 views
1

user_loginイベントまたはForm_loadイベントにスレッドを作成したいとします。 このスレッドでは、いくつかのSQL文を実行するためにクラス関数を呼び出す必要があり、ユーザーは結果やバックグラウンドプロセスが完了するのを待つ必要はなく、単に彼の望むページに移動して、 。 私はASP.NET、C#を使用しています。asp.net/c#のスレッド

+0

.NETのどのバージョンですか? –

+0

@ Jeff Sternal 4.0 – safi

答えて

1

C#での非同期呼び出しの例を次に示します。

http://support.microsoft.com/kb/315582

パターンの選択は、あなたのニーズによって異なります。サンプル5では、アクションの実行時にコードを実行したくない場合に、コールバックとしてnullを指定できることに注意してください。

+0

@ llya Kogan、ありがとう私はそれを探しています。 – safi

3

これは価値があることは、これは悪い考えです。 IISがそのバックグラウンドスレッド(IISの再起動、アプリケーションプールの再起動など、IISの通常の正常な動作)を終了させる可能性があるさまざまな方法があります。その結果、DBトランザクションが黙ってロールバックされることになります。

これらのクエリを確実に実行する必要がある場合は、それらを要求で実行するか、Windowsサービスやその他の長寿命プロセスに送信する必要があります。これは、ユーザーが進行状況に関するフィードバックを得ることができないことを意味するものではなく、IIS要求自体がAJAX呼び出しによって実行される可能性があります。

+0

@ Chris Shain、例やリンクはありますか?これはどうやって? – safi

+1

これは大きな話題です。基本的な考え方は、データベース呼び出しを成功させるためには、msmqのようなものにキューを入れてから、バックグラウンドプロセスでキューを読み込んでコマンドを実行する必要があるということです。キューはデータベースのようにトランザクショナルなので、メッセージをキューに入れると、Webサーバーが再起動してもメッセージが消去されないことを確認できます。もう一方では、読み取りアプリケーションは、すべてのキューメッセージが確実に実行されるように分散トランザクションを使用する必要があります。 –

0

これは、Thread.Startを使用してスレッド内でメソッドを呼び出すことで可能です。 IsBackgroundはデフォルトではfalseです。これにより、アプリケーションの停止を防ぐことができます。

http://msdn.microsoft.com/en-us/library/7a2f3ay4.aspx

しかし、あなたの時間のほとんどは、おそらくあなたのデータベース呼び出しに費やされるからです。コールバックなしで非同期に実行するのはなぜですか? BeginExecuteNonQueryになるSqlCommandで。

+0

これは、iisがアプリケーションプールを再起動するのを妨げません。 –

関連する問題