2008-09-08 4 views
8

asp.netで注意すべき種類のマルチスレッドの問題はありますか?asp.netのマルチスレッド

+0

+1良い質問 – Nick

+0

最終的な問題のブログはPhil Haacksです。http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks- in-asp-net.aspx/Quartz.NETやHangFireなどのバックグラウンドプロセスを実行するための多くのフレームワークがあります。あなたが90秒の制約で暮らすことができれば、QueueBackgroundWorkItemを使用することさえできます。あなたがAzure、Web Job、またはクラウドサービスを利用している場合。 – RickAndMSFT

答えて

0

プログラマティックキャッシングはすぐに私の頭に浮かぶ1つの領域です。それは慎重に使用する必要がある素晴らしい機能です。要求間で共有されるため、更新する前にロックを置く必要があります。

私がチェックする別の場所は、ログファイルに書き込むようなファイルシステムにアクセスするコードです。 1つの要求でファイルに読み書きロックがある場合、他の同時要求は正しく処理されないとエラーになります。

6

「火災と忘れている」操作でそれを使用している場合は、期限切れのものを気にすること(私は、httpContextと思う)は、asp.netクリーンアップコードがあなたの操作が完了すると、特定の情報にアクセスすることができなくなります。

2

これがWebサービスの場合は、スレッドプールを考慮する必要があります。スレッドが多すぎると、最終的にCPU時間の競合が始まるため、アプリケーションが停止する可能性があります。

これはファイルまたはネットワークIO用ですか?その場合は、asynchronous IOの使用を検討する必要があります。それはプログラムに苦労するかもしれませんが、あまりにも多くのスレッドを一度に産み出すことについて心配する必要はありません。

9

ASP.NETページのコードビハインドからスレッドを生成するのは危険です。なぜなら、ワーカープロセスは時々リサイクルされ、スレッドは死にますからです。

Webページのユーザーアクションの結果として長期実行プロセスを開始する必要がある場合は、メッセージをMSMQにドロップし、キューを監視する別個のバックグラウンドサービスを用意することをお勧めします。このサービスは、タスクを達成したい限り長くかかる可能性があり、Webページはほとんど直ちに作業を終了します。 Webメソッドへの非同期呼び出しで同じことを達成できますが、Webメソッドが正常に終了したときに応答を取得することには依存しません。コードビハインドから、素早く火を忘れる必要があります。

+1

あなたはStackOverflowでこのテクニックを複数の質問で提唱しているようですが、これは、例えば課金プロセスのような長時間実行されるプロセスに行く方法だと思います。共有できるサンプルコードはありますか?またはbingedにキーワード? – Salamander2007

+1

バックグラウンドプロセスを実行するためのフレームワークは、これをMSMQで実装するよりはるかに簡単です。たとえば、•Quartz.NETとHangFire。あなたが90秒の制約で暮らすことができれば、QueueBackgroundWorkItemを使用することさえできます。あなたがAzure、Web Job、またはクラウドサービスを利用している場合。 – RickAndMSFT

0

IIS構成に合計25スレッドの制限はありませんか?少なくともIIS 6では私は信じています。この制限を超えると、面白いことが起こることがあります(loooooooong応答時間があります)。

0

マルチスレッドに関する限り、必要なものに応じて、クライアントからの要求の生成を考えてください。 AJAXを使用して要求を生成し、その結果をコールバックで処理することは安全です。また、X分ごとに実行されバックグラウンドでそのように処理するバックグラウンドメカニズムとしてサービスを使用します。

関連する問題