首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#网络应用程序FluentScheduler作业不会在ThreadAbortException之后重复

C#网络应用程序FluentScheduler作业不会在ThreadAbortException之后重复
EN

Stack Overflow用户
提问于 2019-12-19 15:26:38
回答 1查看 531关注 0票数 2

我是IIS10.0上运行的C# web应用程序的开发人员,我使用FluentScheduler库来调度我的作业。

此工作执行数据库查询,然后生成一些文件。最近,我们的作业已经失败了,因为它们运行时间太长了,Windows杀死了线程(这种情况只发生在特定的日子,大量的数据需要处理)。

在对数据库访问进行了一些优化之后,我对线程进行了大量的处理,但这种情况仍然时有发生。

问题是,在线程被终止(并记录异常)之后,作业就会在预定的时间停止运行。

即使发生此异常,我如何确保作业继续运行?

我的代码如下:

代码语言:javascript
复制
Schedule(new GenerateFiles()).NonReentrant().ToRunOnceAt(DateTime.Now.AddMinutes(10)).AndEvery(30).Seconds();

第一次运行的10分钟延迟是存在的,因为我们缓存数据库中的一些可用信息以提高应用程序的性能,而这项工作使用来自该缓存的数据,而且我不知道如何在缓存完成后才开始,所以我添加了这个延迟。

捕获并登录到我的作业上的任何其他异常都不会导致此问题。只有当线程运行时间太长而Windows杀死它时,它才会再次停止运行。

编辑:添加应用程序失败的行(至少堆栈跟踪是这样告诉我的)。

整个工作相当广泛,我不能把它放在这里。

代码语言:javascript
复制
foreach (var datumToGenerate in context.GenerateData.Include(f => f.Datum))
            {
                var datum = datumToGenerate.Datum;

                if (!datum.Generated)
                {
                    output.Add(datum);
                    i++;
                    if (i == 100) return output;
                }
            }

如您所见,我将每次处理的条目数量降至100,但即使将其设置为50或较低的数字,我最终也会得到错误,因为GenerateData表很大,即使在处理后删除了它的条目。

Edit2:实际上,代码在类的任意部分上都失败了。它可以正常运行大约10分钟,然后它就会崩溃。我完蛋了吗??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-20 15:06:08

我和我的同事找到了这个问题的答案。

这和代码无关。

IIS的应用程序池的默认睡眠超时时间为20分钟。通过将应用程序池的值设置为0,我们禁用了应用程序池的超时,从此不再发生此异常。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59412662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档