所以我有一个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
}
}
我是否需要在OnStop中添加CancellationToken并停止任务,否则是不必要的?因为当服务停止时 - 任务也会停止。它安全与否?
答案 0 :(得分:11)
你以130公里的速度沿着高速公路行驶。 突然间你看到一个叫你停下来的警察。 当你注意到他时你就在A点。 你可以:
在现实生活中,任何人都会选择3)。 在.NET中,根据应用程序的性质和重要性,您也可以选择1)或2)。
取决于您是否想要冒险:
答案 1 :(得分:3)
任务以background threads运行。因此,当服务停止时,任务将自动停止。是否需要正式取消任务取决于任务是否需要知道它是否正在退出,以便它可以执行任何必要的清理。