2012-01-10 12 views
9

私はこの問題についていくつかのグーグルを試みましたが、私はsomをもっと知りたいです。ASP.NETはいつ新しいスレッドを終了させますか?

私は長い時間がかかるいくつかの作業を担当するASP.NETアプリケーション内で新しいスレッドを開始しようとしています。私は私のweb.configファイルでこれを置く場合:

<httpRuntime executionTimeout="5" /> 

定期的な要求は5 secounds後にタイムアウトします。テスト用であることを覚えておいてくださいコードから新しいスレッドを開始するとき:

var testThread = new Thread(new ThreadStart(CustomClass.DoStuffThatTakesLongTime)); 
    testThread.Start(); 

このスレッドは5秒以上実行されます。しかし。それはどれくらいの期間実行されますか?たとえば、このスレッドが5時間かかるとします。スレッドはいつ殺されるのですか?アプリケーションプールがリサイクルされるまで実行されますか?または、このスレッドを殺す他に何かがありますか?

+0

どうぞお試しください。 (新しいスレッドがテキストファイルなどに時間を書き込ませます) EDIT:スレッドとタスクの使用に違いがあるかどうかを確認します。 – ZippyV

+0

それは私がしたかったが、私はいくつかのより包括したいと思います。スレッドの継ぎ目は走りますが、何がうまくいかず、何を見上げるかについてもっと知りたいと思います。 –

答えて

9

ASP.NETは作成したスレッドを認識していません。これは、AppPoolがリサイクルされるか、完了するまで実行されます。

ASP.Netしかし、このスレッドの知識を持たないので、それはサーバがアプリケーションプールをリサイクルしなければならないと考えている場合は任意の時点ではかなり急に中止され、これは良いことではないでしょうでした! 'AppDomainIsGoingDown'イベントを購読する方法についてはPhil Haack wrote a blog postを参照してください。

  • そう
  • たMachine.Configを行うためにスケジュールされている、ウェブ:、私はこのblog post by Tess Ferrandezを読んでお勧めしますが、一言で言えば彼らはこれを引き起こすことができるものに関しては

    .ConfigまたはGlobal.asaxが変更された

  • binディレクトリまたはその内容が変更された
  • 再コンパイルの数(aspx、ascxまたはasax)がmachine.configまたはweb.configの設定で指定された制限を超えています(デフォルトでは15)
  • 変更された仮想ディレクトリの物理パスに設定されている
  • CASポリシーが変更され
  • Webサービスが再開される
  • (2.0のみ)アプリケーションのサブディレクトリが削除され
+0

これは、この「exemple」スレッドが5時間実行されることを意味します。スレッドが完了したときにGCが何かを処理するか、何らかの方法でリソースを解放する必要がありますか? –

+1

@ MarkusKnappenJohanssonスレッドは、完了するかAppPoolが終了するまで実行されます。スレッドの存続期間中に取得されたすべてのリソースが管理され、必要なGCはすべて実行されます。 –

+0

だから。スレッドがサーバーによって中止される可能性があるという事実について。スレッドが実際に何かと連携しているのでしょうか?それともアイドルなのか?これに対して「保護する」方法はありますか? –

関連する問題