1

だから私はWindowsサービスを持っていて、OnStartでタスクを開始しました

   partial class AppServices : ServiceBase
    {
        private static readonly ILog Log = LogManager.GetCurrentClassLogger();
        private Task _task;

        public AppServices()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            Log.Info("Service started");

            _task = Task.Factory.StartNew(StartWork, TaskCreationOptions.LongRunning);
        }

        protected override void OnStop()
        {
            Log.Info("Service stopped");
        }

        private void StartWork()
        {
           while(true)
           {
               // grab some data from db or services
           }
       }

CancellationTokenを追加してOnStopでタスクを停止する必要がありますか、それとも不要ですか?サービスが停止するとき-タスクも停止するため。安全かどうか?

4

2 に答える 2

12

あなたは時速130キロで高速道路を運転しています。突然あなたはあなたにやめるように言う警官を見ます。彼に気付いたとき、あなたはポイントAにいます。次のいずれかを行うことができます。

  1. 彼の命令を無視する
  2. 瞬時に(ポイントAで)車線を変更し、大爆発で墜落するのを止めます。
  3. 徐々に、しかし安全に停止し、車両の速度を下げ、最終的にポイントBで0 kmphに到達します。ポイントBはポイントAに可能な限り近づきますが、誰かを危険にさらさないように必要な距離にあります。

実生活では誰もが3)を選択します。.NETでは、アプリケーションの性質と重要性に応じて、1)または2)を選択することもできます。

あなたが危険を冒したいかどうかはあなた次第です:

  1. 警察に追われている(タスクマネージャーに殺された)
  2. クラッシュ(重要なデータが失われたり、不整合が発生したりするなど)
  3. 何もない
于 2013-03-01T14:05:06.083 に答える
4

タスクはバックグラウンドスレッドとして実行されます。したがって、サービスが停止すると、タスクは自動的に停止します。タスクを正式にキャンセルする必要があるかどうかは、タスクが必要なクリーンアップを実行できるように、タスクが終了していることを知る必要があるかどうかによって異なります。

于 2013-03-01T14:07:16.920 に答える