.net core .NET核心中的后台线程与前台线程

.net core .NET核心中的后台线程与前台线程,.net-core,daemon,application-shutdown,.net Core,Daemon,Application Shutdown,我正在尝试使用.NETCore编写一个守护程序应用程序(我是否也使用ASP.NETCore仍然是个问题),我打算在linux上运行这个应用程序。守护进程本质上是一个计时作业,我的计划是将其实现为一个任务,它包含一个无限的while循环,并且在每次迭代中它都执行等待任务。延迟(…)在间隔之间“休眠”。我知道我也可以使用计时器或类似工具,但在我的例子中,每次迭代都会花费很长的时间,持续时间也很不固定,因此我宁愿在可变的时间表上运行,这样迭代之间的时间是固定的,而不是严格按照固定的节奏运行 无论如何,

我正在尝试使用.NETCore编写一个守护程序应用程序(我是否也使用ASP.NETCore仍然是个问题),我打算在linux上运行这个应用程序。守护进程本质上是一个计时作业,我的计划是将其实现为一个
任务
,它包含一个无限的
while
循环,并且在每次迭代中它都执行
等待任务。延迟(…)
在间隔之间“休眠”。我知道我也可以使用
计时器
或类似工具,但在我的例子中,每次迭代都会花费很长的时间,持续时间也很不固定,因此我宁愿在可变的时间表上运行,这样迭代之间的时间是固定的,而不是严格按照固定的节奏运行

无论如何,我认为这与问题无关。真正的问题是:如何实现此守护进程线程的正常关闭,使其仅在等待延迟的迭代之间关闭?一个想法是将线程设置为前台线程,并在延迟阶段处理取消,我不知道该怎么做(或者即使这是linux上的一件事——我在某处读到bg/fg线程是Windows概念)


示例代码将是一个加号。

只是确认一下:您确实意识到无法保证大多数用户代码的可靠原子执行,对吗?如果有人拔下电源线,即使终结器也不能保证运行。通过一点研究,您可能会成功地处理大多数关机场景,确保它们使系统处于可预测的状态,但仍然需要处理“熄灯”情况。Task.Delay()使用CancellationToken。哪一种是取消任务的标准方法。@Kirill-没错,我知道熄灯问题-我想我更感兴趣的是在.net core(linux上)中有一个守护进程的情况下,通常如何实现干净关机