ASP.NETの真の非同期操作

.net asp.net c# multithreading
ASP.NETの真の非同期操作

ASP.NETページからいくつかのHTTPリクエストを実行しようとしています。 ページ自体は応答を知る必要はなく、処理を続行し、ページを配信する必要があります。

HTTPコードをBackgroundWorkerに入れて非同期で実行しようとしましたが、最初は次のエラーが発生しました。

_
この場合、非同期操作は許可されません。 非同期操作を開始するページでは、Async属性をtrueに設定する必要があり、非同期操作はPreRenderCompleteイベントより前のページでのみ開始できます。
_

だから私は言われたとおりにし、ページにAsync属性を与えました。 その後、いくつかの調査を行ったところ、BackgroundWorkerが実際に非同期操作を実行していないことがわかりました。 いくつかのバックグラウンドの読書(http://www.pluralsight-training.net/community/blogs/mike/archive/2005/11/04/16213.aspx)は私にそれを知らせました。

_
PreRenderおよびPreRenderCompleteイベントは、登録されているすべての非同期タスクのすべてのタイムアウトイベントハンドラーが呼び出されて戻るまで再開しません[しません]。
_

BackgroundWorkerがページの処理を中断しないようにするにはどうすればよいですか?

  3  2


ベストアンサー

もう1つのオプションは、ThreadPool.QueueUserWorkitem()です。 非同期的に何かを発射します。 また、asp.netスレッドプールのスレッドも使用します。

私は通常、サーバーでthreadPoolを使用し、gui / winformsでBackGroundWorkerを使用しました。 それができないと言っているわけではありません。

BackgroundWorkerで動けなくなった場合は、少なくとも他に試してみてください…​

SOの投稿は他にもいくつかあります。

2


ASP.NETで真の非同期操作を実行する新しい方法は、http://msdn.microsoft.com/en-us/library/system.web.ui.pageasynctask.aspx [PageAsyncTask class。]を使用することです(サンプルがありますMSDNドキュメントのコード)

また、http://blogs.msdn.com/b/tmarq/archive/2010/04/14/performing-asynchronous-work-or-tasks-in-asp-net-applications.aspx [この投稿を読む] Thomas Marquardtから。 最も興味深いのはこれです:

_
さて、非同期でいくつかの作業を実行する正当な理由があります。どうすればよいですか? まず、リクエストの実行中に実行できるすべてのコードは、モジュールまたはハンドラー内で実行する必要があります。 他に選択肢はありません。 作業を非同期で実行する場合(現在のスレッドのように完全に非同期で、作業が完了した場合にのみ要求の実行を再開する場合)、非同期のモジュールまたはハンドラー内で実行する必要があります。 独自の非同期モジュールまたはハンドラーを実装したくない場合は、ASP.NET 2.0が非同期ページを導入したため、幸運です。これは、IHttpAsyncHandlerに基づいて構築され、PageAsyncTasksと呼ばれる非同期タスクを簡単に実行できる機能です。
_

また、 `PageAsyncTask`クラスを使用しないことを選択した場合、非同期操作を実行するコードサンプルも提供します。

1


タイトルとURLをコピーしました