0

えーと…絶対にバカだと思います。理由は次のとおりです。

私は2年前に書いたいくつかのライブラリ関数を使用しています。数レベル深く埋めて、私はこれらの関数を使用して、必要なパスを構築しました。

System.Web.HttpContext.Current.Request.ApplicationPath System.Web.HttpContext.Current.Server.MapPath

これを使用する代わりに:

HttpRuntime.AppDomainAppPath

httpコンテキストがないため、System.Web.HttpContext.Currentは確かにnullになります。そしてもちろん、私がそれらをトラップして無視していたので、例外はスローされていませんでした。

一体何が悪かったのかと思って、プロジェクトを何時間見つめていたのかわかりません。

みんなの時間を無駄にしてくれて許してください。これはとても恥ずかしいです!!!

4

1 に答える 1

3

ASP.NETアプリケーションでスレッドを生成することはお勧めしません。技術的にはできることは知っていますが、説明しなければならない落とし穴がたくさんあります。推奨されるベストプラクティスは、バックグラウンドタスクを実行するためのWindowsサービスを作成することです。次に、ASP.NETアプリは、バックグラウンドでそれらを処理するサービスに要求を発行できます。

参考文献で更新

asp.netのマルチスレッドに関するコメントから:

ASP.NETサイトでのバックグラウンド処理の使用に関する1つの警告。IISはいつでもアプリケーションをリサイクルでき、これを実行している間、実行中のバックグラウンドスレッドをすべて強制終了します。したがって、スレッドプールスレッドが正常に実行されるという保証はありません。それが問題になる場合は、Windowsサービスを使用してバックグラウンド処理を行うことをお勧めします。

さらに、SOユーザーのMr. Disappointmentは、ここで詳しく説明します。

Windowsサービスは長時間実行されるように設計されており、問題が発生した場合は、通常、個々のサービスよりも心配する必要があります。

于 2012-05-24T13:24:39.090 に答える