IHostedService 无故停止
IHostedService Stop without any reason
谁能给我解释一下为什么我的服务器无缘无故停止了?
在我的 IHostedService 实现下面:
public class HostServiceBox : IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
return Task.Run(() =>
{
DomonutyBoxBusiness.StartBoxListening(); //STARTUP Box listening
while (true)
{
Logging.Info(DateTime.Now + " HostServiceBox Running");
Thread.Sleep(10000);
}
}, cancellationToken);
}
public Task StopAsync(CancellationToken cancellationToken)
{
Logging.Info(DateTime.Now + " StopAsync");
//TODO impplement a Stop litening all boxes
throw new NotImplementedException();
}
}
这是我的日志?
.....
2/24/2018 8:31:27 PM HostServiceBox Running
2/24/2018 8:32:27 PM HostServiceBox Running
2/24/2018 8:33:27 PM HostServiceBox Running
2/24/2018 8:34:27 PM HostServiceBox Running <------
2/25/2018 11:22:07 AM HostServiceBox Running <-----
2/25/2018 11:23:07 AM HostServiceBox Running
2/25/2018 11:24:07 AM HostServiceBox Running
2/25/2018 11:25:07 AM HostServiceBox Running
......
我的方法在带有 kestrel (.Net Core) 的 IIS 上看起来像睡了吗?为什么?
通常我的 while(true) 重新启动,因为我调用 API。但是 IHostedService 是一个后台任务,它不应该停止吗?
相关post github
用户tym32167走在了正确的轨道上。 deployment:
部分的 IHostedService
文档中提到了这一点
on IIS or a regular Azure App Service, your host can be shut down because of app pool recycles
IIS 应用程序池的默认 idle-timeout 为 20 分钟,它们的默认应用程序池回收时间也为 29 小时。通常,您希望将空闲超时设置为零(禁用)并将回收设置为危害最小的固定时间。
有一个有趣的博客 post 关于他们为什么选择 29 小时 here 并且它还涵盖了空闲超时。
此外,如果您碰巧要部署到 Azure,前面链接的那篇文章建议了其他部署方式,这将真正 运行 full-time(容器、WebJobs 等)。
谁能给我解释一下为什么我的服务器无缘无故停止了? 在我的 IHostedService 实现下面:
public class HostServiceBox : IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
return Task.Run(() =>
{
DomonutyBoxBusiness.StartBoxListening(); //STARTUP Box listening
while (true)
{
Logging.Info(DateTime.Now + " HostServiceBox Running");
Thread.Sleep(10000);
}
}, cancellationToken);
}
public Task StopAsync(CancellationToken cancellationToken)
{
Logging.Info(DateTime.Now + " StopAsync");
//TODO impplement a Stop litening all boxes
throw new NotImplementedException();
}
}
这是我的日志?
.....
2/24/2018 8:31:27 PM HostServiceBox Running
2/24/2018 8:32:27 PM HostServiceBox Running
2/24/2018 8:33:27 PM HostServiceBox Running
2/24/2018 8:34:27 PM HostServiceBox Running <------
2/25/2018 11:22:07 AM HostServiceBox Running <-----
2/25/2018 11:23:07 AM HostServiceBox Running
2/25/2018 11:24:07 AM HostServiceBox Running
2/25/2018 11:25:07 AM HostServiceBox Running
......
我的方法在带有 kestrel (.Net Core) 的 IIS 上看起来像睡了吗?为什么?
通常我的 while(true) 重新启动,因为我调用 API。但是 IHostedService 是一个后台任务,它不应该停止吗?
相关post github
用户tym32167走在了正确的轨道上。 deployment:
部分的IHostedService
文档中提到了这一点
on IIS or a regular Azure App Service, your host can be shut down because of app pool recycles
IIS 应用程序池的默认 idle-timeout 为 20 分钟,它们的默认应用程序池回收时间也为 29 小时。通常,您希望将空闲超时设置为零(禁用)并将回收设置为危害最小的固定时间。
有一个有趣的博客 post 关于他们为什么选择 29 小时 here 并且它还涵盖了空闲超时。
此外,如果您碰巧要部署到 Azure,前面链接的那篇文章建议了其他部署方式,这将真正 运行 full-time(容器、WebJobs 等)。