Thread.Start()
最近スレッドと長時間実行タスクを開始し、いくつかのリクエスト関連の問題に気づきました。
編集
ジョブの処理中にユーザーにフィードバックを提供し、スレッドプールを効率的に使用し、可能であればHttpContextを使用するために何を提案しますか?
Thread.Start()
最近スレッドと長時間実行タスクを開始し、いくつかのリクエスト関連の問題に気づきました。
編集
ジョブの処理中にユーザーにフィードバックを提供し、スレッドプールを効率的に使用し、可能であればHttpContextを使用するために何を提案しますか?
データにアクセスする場合:
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つを渡すことができます。
HttpContext オブジェクトの HttpContext.Current プロパティは静的です。また、別のスレッドまたは App_Code のアセンブリで使用できます。ただし、現在の Request の HttpContext オブジェクトを返します。
HttpContext のすべての静的プロパティはスレッド セーフです。また、HttpContext のすべてのインスタンス プロパティはスレッド セーフではありません。