问题标签 [asp.net-core-hosted-services]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
864 浏览

c# - 同时运行长任务IHosted服务并可手动开启和关闭

嗨,我在使用 IHostedService 为我的后台服务运行长任务时遇到问题,起初它确实工作正常,但从长远来看,后台服务突然停止,此线程退出代码:

我将我的后台服务注册为

因为将来我想手动打开和关闭我的后台服务

这是我在后台服务 StartAsync 中的代码

如果注册后台服务有问题,我会感到困惑,因为我看到我的后台服务启动了,但从长远来看,它突然停止了,我已经摆脱了后台服务中的那些 Thread.Sleep() 希望你能帮助提前谢谢.

0 投票
1 回答
3734 浏览

c# - asp .net 核心中 IHostedService.StartAsync 中的 CancellationToken 有什么意义?

我正在尝试实现托管服务,但我想知道在通话中我应该对 CancellationToken 做什么IHostedService.StartAsync

Microsoft 文档中有很多关于取消令牌StopAsync本质上是超时(默认为 5 秒),这意味着正常关闭应该在合理的时间范围内发生。

但关于 中的令牌StartAsync,并没有太多信息。如果有的话,文档指定实现不应该等待长时间运行的初始化过程,而应该只返回一个长时间运行的任务。因此,如果我支持取消,我是否应该将取消令牌传递给创建该长时间运行任务的任何对象?如果是,取消这个令牌不是更笨的版本StopAsync吗?为什么框架会这样做?

事实上,在微软自己的抽象BackgroundService中,实现StartAsync实际上完全忽略了该令牌并创建一个新的令牌,该令牌在调用时被取消StopAsync......

那么我是否认为框架传递的初始令牌的全部意义实际上是用于通过覆盖虚拟方法来阻止 初始化过程(尽管文档建议反对它)BackgroundService.StartAsync?例如

0 投票
1 回答
219 浏览

asp.net-core-webapi - 在 ASP.NET Core 托管服务中从何处开始监视队列

我正在关注这个队列托管服务的示例,以将其添加到 ASP.NET Core 应用程序中,但我不清楚StartMonitorLoop应该在哪里调用。我最终将它修改为EnsureMonitorLoop,添加了一个检查,以便Task.Run只调用一次,MonitorLoop为我的 API 控制器的构造函数添加一个参数,然后EnsureMonitorLoop从那里调用。我觉得 API 控制器构造函数应该开始监视队列有点好笑。该示例Program.cs似乎与 Visual Studio 为我生成的示例非常不同。我的使用这种WebHost.CreateDefaultBuilder(args).UseStartup<Startup>方法。那是他们打电话的地方StartMonitorLoop

打电话的正确地点在哪里StartMonitorLoop,为什么?谢谢!

0 投票
1 回答
1621 浏览

azure - Azure 函数与 ASP.NET Core Worker 服务?

Azure 函数与ASP.NET Core Worker Service有何不同?

这两者是否涵盖相同的用例?我如何决定使用哪一个?

0 投票
1 回答
924 浏览

c# - 控制台应用程序执行顺序和延迟时间中的多个 IHostedService

我有两个后台服务。其中一个通过串行端口执行测量,另一个称为 SettingsWorker 获取测量设置(如传感器数量、模块、获取延迟等)并通过静态变量共享它。

这是我的程序课。

当我的应用程序始终启动时,必须首先执行 SettingWorker 并设置共享静态变量。在我的观察中,排序服务。AddHostedService 在应用程序启动时更改执行顺序。

如果我首先添加 SettingsWorker 是否保证它将首先执行后台任务?

如果在我的情况下有多个后台服务,当任何服务尚未完成执行且尚未到达 await Task.Delay 行时,它是否可能会停止并且另一个后台服务开始运行只是因为已达到延迟时间。

0 投票
1 回答
189 浏览

.net-core - 根据数据库调度调用 .NET 方法

我正在开发一个应用程序,该应用程序允许用户定义他们自己的时间表,以便执行某个操作。该操作需要在预定时间触发,它将有效地调用我的 .NET Core 应用程序中的方法。

我已经回顾了一些推荐的方法,例如这个,它讨论了使用IHostedService- https://blog.maartenballiauw.be/post/2017/08/01/building-a-scheduled-cache-updater-in -aspnet-core-2.html

我也看过HangFire

这些方法的问题,以及我在其他文章中看到的大部分讨论,是它们真正专注于根据预定义的时间表运行任务(例如每 2 小时运行一次任务),而不是自定义的、动态的日程。我正在寻找一种方法来解释我如何可以做一些事情,比如从应用程序中连续轮询数据库计划(或者做一些等效的事情,这样更有效),以触发一个动作。

检查数据库计划并将其连接到我的 .NET Core 应用程序中可以在计划时间运行所需操作的有效方法是什么?有没有办法可以使用 anIHostedService或 HangFire 来做到这一点?那么是否有任何文章提供了如何做到这一点的明确示例?

0 投票
2 回答
4183 浏览

c# - 如何在一天中的特定时间运行 .net Core IHosted 服务?

我有以下计时器可以在 .Net 核心 Ihosted 服务中运行,

我正在使用这个特定的重载,

但是JobToRun一旦控制到达它就会执行。如何让它每天在一天中的特定时间运行?提前致谢。

0 投票
1 回答
1561 浏览

asp.net-core - 仅在一个横向扩展的 Azure 应用服务实例上运行 IHostedService

是否可以IHostedService在 ASP.NET Core 中仅在一个横向扩展的 Azure 应用服务实例上运行?或者解决方案是IHostedService在一个实例的自己的应用程序服务中运行它?

我有BackgroundService一个每天运行一次并通过电子邮件发送报告。当我的应用服务扩展到 2 个实例时,此服务将每天同时运行两次,从而导致发送两封相同的电子邮件。

我怎么解决这个问题?

0 投票
1 回答
303 浏览

c# - 使用 Scoped IHostedService 访问 DBContext 时遇到问题

我正在尝试创建一个执行 Sql 命令的计划任务。实际计划的过程工作正常,但是我的 dbcontext 存在无法实际访问数据库的问题。

它将获得一个包含所有适当表的上下文,但对表的任何操作都会引发InvalidOperationException. 当尝试在调试模式下检查任何表格元素时,它们也都InvalidOperationException以红色X作为图标。

我也尝试通过MediatR命令和处理程序发送命令,但错误相同。每次更改代码的尝试都会导致相同的错误而没有偏差。

这是我第一次尝试创建后台服务,作为参考,我正在学习 https://thinkrethink.net/2018/02/21/asp-net-core-background-processing/的教程

启动.cs

后台服务

范围处理器

待安排的任务

0 投票
2 回答
3217 浏览

asp.net - 运行后台任务时防止 IIS 空闲超时

在我们的 ASP.Net Core Web API 中,我们已经习惯Hosted Services了执行一些后台任务。有时这些后台任务可能需要很长时间才能完成(大约一个小时)。除非有长时间运行的任务,否则一切都可以无缝运行。

IIS 应用程序池的空闲超时默认值为 20 分钟。因此,当 20 分钟没有请求时,IIS 会重新启动应用程序池。但有时后台任务可能正在运行并且 IIS 重新启动,而不管它是否导致任务突然终止而没有将其标记为完成。IIS 启动后,托管服务启动处理再次拾取任务。但在完成之前,IIS 会重新启动,这可能会一直持续下去。当存在可能多次发送同一电子邮件的电子邮件发送任务时,这可能会导致很多问题。

由于托管服务是 ASP.NET Core 的一等公民,如果 IIS 在执行空闲超时时也考虑后台执行,那将是理想的。

现在我们通过将 Idle Timeout 设置为 0 来解决这个问题,这样它就不会超时。这是一种 hacky 解决方案。此外,在动态添加和删除节点的负载平衡环境中,这不是一个可行的选择。

有没有更好的方法来“防止 IIS 在后台执行过程中重新启动”?

谢谢