我有web api
。asp.net core
在表单的按钮上,我启动了一个可以运行长达 5 小时的后台任务。
问题是大约1小时后后台任务被强制终止。
首先,我是这样启动后台任务的:
// POST api/analytics/run
[Route("api/[controller]/run")]
[HttpPost]
public async Task<JsonResult> RunAnalyticsAsync([FromBody] DataRequested dataRequested)
{
await Task.Factory.StartNew(async () =>
{
do
{
//
}
while (report.Status == ReportStatus.Working);
await CloudTableService.UpdateClientData(report);
});
}
从代码中可以看出,数据必须存储在一个表中。如果后台线程已经运行了不到一个小时,那么就会发生这种情况。如果更多,则保存达不到。起初,我以为我没有正确运行后台进程。
找到文章在 ASP.NET Core 中使用托管服务的后台任务
我选择了最后一个选项:队列中的后台任务。适应您的项目。我在F5调试模式下运行。大约一个小时后,同样的事情发生了。我还注意到visual studio
一个小时后在调试模式下,它(调试)结束(输出窗口,调用堆栈关闭),没有关于异常或错误的信息,web api
它仍然可用。当在 Web 应用程序中刷新页面时(与 一起使用web api
),有关活动后台任务的信息会消失,并且会从表中加载前一个后台任务的结果。
我将活动任务保存在这样一个类中,该类被声明为单例服务。
public class MemoryCacheService : IMemoryCacheService
{
public IList<BaseReportRealTime> RealTimeReports { get; }
public MemoryCacheService()
{
RealTimeReports = new List<BaseReportRealTime>();
}
}
public interface IMemoryCacheService
{
IList<BaseReportRealTime> RealTimeReports { get; }
}
可能是什么问题呢?