2017-01-27 3 views
0

私はワーカーをアクティブにするために30分ごとに呼び出すページを持つWebアプリケーションを持っています。 Web.configファイルで例外:Response.Endの問題を処理していないときにスレッドが中止されました

<%@ Page Language="C#" AutoEventWireup="true" %> 
<html> 
<head runat="server"> 
    <script runat="server"> 
    public void Page_Load(object sender, EventArgs e) 
    { 
     System.Threading.Tasks.Task.Factory   
      .StartNew(() => { new MyApplicationWorker().RunApplicationWorker(); }); 
    } 
    </script> 
</head> 
<body></body> 
</html> 

、私はタイムアウトを防ぐために、このラインを持っていると私は労働者が完了知っている:約5-7回週には、私は、ASPXは多少のようになります

Thread was being aborted例外を取得しますそれよりはるかに短い時間で。

<httpRuntime enableVersionHeader="false" executionTimeout="300" /> 

ご覧のとおり、ページにはバックグラウンドで実行されるワーカーが読み込まれ、呼び出されます。 Response.End issueまたはServer.Transferはありません。この問題は、この問題を扱う他のほとんどの記事が中心です。例外が発生しないようにするにはどうすればよいですか?

ありがとうございました。

+2

IISプールリサイクルの設定は何ですか?アプリ全体がリサイクルされているのでしょうか? –

+1

これは関連する可能性がありますhttp://stackoverflow.com/questions/7558145/unexpected-thread-abort-exception-using-tasks-why?答えの1つはMSDN:「バックグラウンドスレッドはアプリケーション終了前に待機していません」と引用しています。おそらく、IISはスレッドを強制終了するプロセスをリサイクルします。 –

+0

@PawełŁukasik:このアプリケーションは(現在は)共有ホスティング環境でホストされています。 – frenchie

答えて

1

これは私が1年以上にわたり整理しようとしていたバグであり、他のすべての関連する質問はResponse.End()の問題に対処しているようでしたが、ここではそうではありませんでした。

私はいつもバグが発生したメソッドに何か間違っていると思っていましたが、実際にはワーカーがバグを開始する場所になっています。

解決策は簡単です:.Wait()を追加してから、ログからバグが消えました。

このother questionにつながると私はこれが中止されているワーカースレッドの同じ問題にぶつかるだろう他の人に役立ちます願っていますコメントalex.bに感謝します。

関連する問題