ASP.NET 3.5 Webアプリケーションは、完了に数時間かかるいくつかのタスクを開始する必要があります。明らかな理由から、これらのタスクを開始するページは、終了するのを待つことができず、誰も応答を得るまで待たずに済むので、タスクは非同期でなければなりません。ASP.NET長い実行タスク。スレッドが中断されている例外
これらの長期実行タスクをすべて処理するヘルパークラスがあります。およそ10mlの液体フッ化水素を圧入した後:私たちはThreadPool.QueueUserWorkItem
アプローチを使用しましたが、結果は常に同じとなっている以前の実装で
public static bool ScheduleTask(TaskDescriptor task, Action action)
{
bool notAlreadyRunning = TasksAsync.TryAdd(task);
if (notAlreadyRunning)
{
Thread worker = null;
worker = new Thread(() =>
{
try { action(); }
catch(Exception e)
{
Log.LogException(e, "Worker");
}
TasksAsync.RemoveTask(task);
workers.Remove(worker);
});
workers.Add(worker);
worker.Start();
}
return notAlreadyRunning;
}
:これらのタスクを実行スケジュールと主な方法は、現在、次のようです。 20〜30分スレッドが中止されました例外がスローされました。
なぜこのようなことが起こっているのですか?どのように防止することができますか?
詳細:
- は、標準的な構成をIIS。決定
ご回答ありがとうございました:
- タスクは、
UPDATEは、データベースおよび/またはIO操作などにquerys何でもかまいません。今私はどの質問を答えにするのか分かりません。それらのすべてが有効であり、この問題に対する可能な解決策です。今日を待って、最も高い票の回答に答えるとマークします。抽選の場合、最初に示された回答を選択します。通常は、最も関連性の高い順に並べられます。
IISのリサイクル構成を変更することで、私が選択した解決策を知りたいと思っている人は誰でも、私の研究ともちろん答えに基づいて理想的なソリューションと考えています「Worker Service」を作成し、ASP.NET Appと新しい「Worker Service」の間の通信ソリューションを使用して、実行される長期的な作業を調整することです。
IIS AppPools/workersはリサイクルしていますか? –
IIS設定はIIS 7の標準設定です。そうですね、私は推測します。 – Unlimited071
私はASP.NETの中で掘り下げていたので、しばらくしていましたが、メモリが役立つと、ワーカープロセスがリサイクルするとスレッドを停止することができます。リサイクルを無効にして、それが糸流産の原因かどうかを確認してください。 (そうだとすれば回避策はわかりませんが、私が言ったように、特定の問題には触れていません) –