我正在编写Windows服务,该服务创建了几个要运行的并行任务:以下是示例代码段:
private static async Task TaskMethod()
{
while(runningService)
{
// Thi will create more than one task in parallel to run and each task can take upto 30 minutes to finish
Task.Run(() => TaskMethod1(arg1);
}
}
internal static void Start()
{
runningService = true;
Task1 = Task.Run(() => TaskMethod());
}
internal static void Stop()
{
runningService = false;
Task1.Wait();
}
现在,当我停止服务时,它不会创建任何新任务,因为runningService = false
,但是Windows服务不会等待30分钟就可以完成已经运行的任务。
现在我读到服务有一个x分钟的超时,可以使用注册表设置来更改它,我只是想知道是否有一种方法可以使服务等待每个任务完成,而不是通过注册表。
在我的.net核心服务中,当我的服务被关闭时,我使用接口IHostApplicationLifetime
进行拦截,方法是使用IHostApplicationLifetime.ApplicationStopped.Register(Action callback)
注册要调用的操作。然后,您可以在回调中等待任务完成。