1

アプリケーションの起動時に実行される長時間実行タスクに関していくつか質問があります。私は、Global.asax(Application_Start) で asp.net アプリケーションが開始されたときに実行されるスレッドを作成し、Global.asax (Application_End) でスレッドを中止します。

thread を My Task に置き換えたい。私はこのようにしました

スレッドの実装

t = new Thread(new ThreadStart(() => 
               CheckConnection(emailTo, emailSubject, emailBody)));
t.Start();
_logger.Info("DB Monitor Thread Started ThreadID: " + t.ManagedThreadId);

タスクの実装

Task.Factory.StartNew(
   state =>
       {
           System.Web.HttpContext.Current = (HttpContext)state;
           CheckConnection(emailTo, emailSubject, emailBody);
       },
   System.Web.HttpContext.Current );

基本的に接続方法を確認してください設定された間隔の後にSQlサーバーが稼働中であるかどうかを確認し、失敗した場合はメールを送信します。私の質問は

接続の実装を確認する

while (true)
{
    Thread.Sleep(600000);                

    using (EntityFMContextctx = new EntityFMContext())
    {
        try
        {
            ctx.Connection.Open();                  
        }
        catch (EntityException ex)
        {
            SendEmail(to, subject, body, ex);
        }                   
    }               
}

質問:

  1. Thread.Abort のようにこのタスクをキャンセルするにはどうすればよいですか? このタスクもキャンセルできますか?

  2. アプリケーションが End または Stop であるため、タスクをキャンセルする必要がありますか。このタスクは自動的にキャンセルまたは中止されませんでした。応募は締め切りましたので。

このシナリオを処理する方法を教えてもらえますか。どんな助けでも大歓迎です。

4

0 に答える 0