0

Thread.Start()最近スレッドと長時間実行タスクを開始し、いくつかのリクエスト関連の問題に気づきました。

編集

ジョブの処理中にユーザーにフィードバックを提供し、スレッドプールを効率的に使用し、可能であればHttpContextを使用するために何を提案しますか?

4

3 に答える 3

0

データにアクセスする場合:

Server.Identity.Nameのようなデータの場合、事前にその情報を収集して非同期コードに渡すことは良いアプローチだと思います。そのコードは現在、これらのいくつかのプロパティにのみ依存しているため、その優れたデカップリング。

動作にアクセスする場合:

ASP.NETでスレッドをどのように使用していますか?動作する2つのアプローチは、IAsyncHttpHandlerを実装して登録するか、ASP.NETページからPage.AddOnPreRenderCompleteAsync()を呼び出すことです。

IAsyncHttpHandlerの場合、実装するコールバックにはHttpContextが渡されます。要求処理が終了したことをASP.NETに示すまで、任意のスレッドからその参照コンテキストを使用できるはずです。もちろん、一度に1つのスレッドからの参照のみを使用する必要があります。

Page.AddOnPreRenderCompleteAsyncの場合、同じ条件でコールバックからPage.Contextを安全に呼び出すことができます。

HttpContext.Currentを使用するApp_Codeにある既存のコードの場合、コードがHttpContextを入力パラメーターとして受け取るように、それをリファクタリングする必要があります。既存のコードはHttpContext.Currentを渡すことができます。現在、スレッドから作成している新しいコードは、この回答で前述したコンテキストの1つを渡すことができます。

于 2009-07-26T01:22:05.263 に答える
-1

HttpContext オブジェクトの HttpContext.Current プロパティは静的です。また、別のスレッドまたは App_Code のアセンブリで使用できます。ただし、現在の Request の HttpContext オブジェクトを返します。

HttpContext のすべての静的プロパティはスレッド セーフです。また、HttpContext のすべてのインスタンス プロパティはスレッド セーフではありません。

于 2009-07-24T18:14:19.493 に答える