我有一个 .Net (v4.0) Windows 服务应用程序,它在开始时旋转一个 tpl 任务,该任务执行某些长时间运行的活动,并且在应用程序的生命周期内基本上保持活动状态,因此是使用 TaskCreationOptions 创建的。LongRunning参数值。
每当服务停止并调用 .OnStop() 方法时,我在创建它时将.Cancel() CancellationToken(Source) 移交给工作任务,并且我希望它是.OnlyOnCanceled(...)延续任务跑。
问题是,服务/进程在没有“完全”运行的连续任务的情况下关闭 - 有时它退出相当快,有时它完全运行,有时它没有。
这对我来说确实有意义,因为该特定任务可能位于主线程之外的另一个线程上,因此无法“停止”/阻止该主线程结束。
由于我在该 Windows 服务应用程序中没有 SynchronizationContext 我无法告诉继续任务在那里/在主线程上运行,所以我想知道:我该怎么做?
更准确地说,在运行 tpl 任务时处理应用程序关闭的最佳实践是什么?