我是否需要终止任务在窗口服务中调用OnStop方法?(Do I need to terminate

2019-10-17 17:56发布

所以我有一个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停止工作或没有必要? 因为当服务将停止 - 任务将停止为好。 它是否安全呢?

Answer 1:

你在130个KMPH拉低了高速公路。 突然,你看到一个警察谁告诉你停下来。 当你发现他,你在A点,您可以:

  1. 忽略他的命令
  2. 瞬间(在A点)停止变换车道,并用大爆炸崩溃。
  3. 渐渐但安全地停止,减少你的车的速度,并最终达到在B点B点为0 KMPH是接近A点可能,但只要有必要不危及任何人。

在现实生活中的人会选择3)。 在.NET中,根据您的应用程序的性质和重要性,你可以选择1)或2)也。

这取决于你是否要风险:

  1. 被警察追赶(通过任务管理器杀死)
  2. 崩溃(松散的重要数据,或者导致不一致,什么不可以)
  3. 绝对没有


Answer 2:

任务运行的后台线程 。 因此,当该服务停止,该任务将自动停止。 无论您需要正式取消任务取决于该任务是否需要知道它正在退出,以便它可以执行任何必要的清理。



文章来源: Do I need to terminate Task in windows service in OnStop method?