2011-11-16 7 views
5

デリゲートでBeginInvokeを呼び出すと、アクションは別のスレッドで実行されます。 ASP.NETで呼び出された場合、CLRワーカースレッドが使用されますか?それとも、IISワーカースレッドを使用していますか?ASP.NETで代理人を使用して非同期操作を処理する

後者の場合、非同期のASP.NETパターンを使用して、アクションがCLRワーカースレッド上で確実に実行されるようにする必要があります。しかし、アクションがBeginInvokeでそこで終わるならば、私はむしろそれをしないでしょう。

答えて

6

これはCLRワーカースレッドを使用します。

まずhere

で説明したように、ASP.NETは、この問題では、.NETの欄を参照して、CLRスレッドプールの詳細な背景のために(サービス要求にプロセス全体のCLRスレッドプールを使用しています)。

EDIT:

別のリソースがthis blog

残念ながら、BeginInvokeメソッドによって使用されるスレッドは、実際にページ要求を処理するためにASP.Netで使用されるのと同じワーカースレッドプールから取られている

+0

ありがとうございました。 MVCは非同期モデルをサポートしています。私がBeginInvoke技術と一緒に活用すれば、私のページは速く戻り、仕事はIISワーカースレッドを占有しません。正しい? –

+0

そのブログ記事を読み返してみると、私は単にThread.Start()テクニックを行うことができます。私のアプリケーションでは、これらのプロセスが一度に1つ以上しか発生しないというリスクはありませんので、この時点で私のニーズに最も簡単で最も保守的な解決策になるでしょう。誰かのために、 "良い。私はちょうどThread.Start()を使用し、自分のスレッドを作成する"というフレーズのブログ投稿を検索します。 –

+0

@John Yeaあなたは正しいです。ユーザーが結果について知っていることなく、ページをすばやく返すだけの場合は、その利点があります。パフォーマンスは向上しません。 – Mithir

1

スレッドの使用状況/管理は、IIS6、IIS7、およびIIS 7.5では少し異なります。

かなり詳細とここで更新説明:これは、あなたの質問が、とにかく読んで良いが答える

ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0

わからない場合。

1

カスタムデリゲートを使用してBeginInvokeメソッドを呼び出すと、アプリケーションのワーカースレッドを素早く起動できます。しかし残念ながら、ASP.NETがHTTP要求を処理するために使用する同じプールのスレッドを消費するため、アプリケーションの全体的なパフォーマンスが低下します。

非同期メソッドからのコールバックが重要な場合は、非同期処理が完了するまでメインスレッドがクライアントに戻るのをブロックする必要があります。ロギングとアナリティクスが「ファイヤー・アンド・フォー・忘れ」メソッド呼び出しの場合、操作が簡単になり、メソッドを起動してサーバーがクライアントに応答できるようにすることができます。ただし、コールバックが重要で、サーバーが処理を完了した場合、完了したコールバックを処理するサーバー上に何も起こっていません。これはASP.NETアプリケーション用のサーバー上での非同期処理が、WinFormsアプリケーションとは異なる点です。

関連する問題