0

Web ページで、並列プロセスを起動して長時間実行されるタスクを実行し、電子メールを送信してその「出力」を追跡します。しかし、メールを送信する前にスレッドが終了することがあります (メールは私が持っている唯一のトラックです)。これはタイムアウトに関連している可能性があります。

ここにコード:

var thread = new Thread(() =>
{
    var cli = Factory.GetClient(callBack);
    FedDBService.ReturnMessage msg;
    try
    {
       msg = cli.SendFedCards(xmls.ToArray());
    }
    catch (Exception exe)
    {
       msg = new FedDBService.ReturnMessage();
       msg.Error = exe.Message;
    }
    finally
    {
        cli.Close();
        completion.Finished = true;
    }
    message = String.Format(@"{0}Ended: {1: HH:mm} {2} {3}", message, DateTime.Now, 
              msg.Error.Trim(' ', '\n', '\r', '\t') == "" ? 
                                   "Withouth errors" : "With errors:"
                , msg.Error);
    try
    {
       golf.classes.Mailing.Mail.sendMail(Club.ClubEmail, email, null, 
         "***@***.com", message, "**Subject**", false); 
       // this method works right
    }
    finally
    {
       Thread.Sleep(5 * 60 * 1000);
       RemoveCompletion(guid);
    }
});
thread.Start();

タイムアウトに関連していると思いますか?また、通常のリクエストを永久に実行させずに変更できますか?

4

1 に答える 1

1

Web アプリでバックグラウンド作業を開始するべきではありません。アプリケーション プールがリサイクルされると、バックグラウンド作業は極端な偏見で中止されます。

Phil Haack は、このトピックに関するブログをここに書いています。

The Dangers of Implementing Recurring Background Tasks In ASP.NET

推奨される解決策は、この作業を別の Windows サービスに渡すことです。

于 2013-04-08T11:13:42.297 に答える