问题标签 [ihostedservice]

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 回答
78 浏览

c# - 是什么让 BackgroundService.ExecuteAsync 方法无法完成?

我刚刚使用标准 Visual Studio 模板创建了一个 Worker Service。在 Worker 类中,如果我删除while (!stoppingToken.IsCancellationRequested){...}包装器并运行应用程序,ExecuteAsync 永远不会完成。如果我添加return到方法的末尾,它又不会完成。

谁能解释是什么让这种方法保持活力?

我想知道为什么在下面的代码中ExecuteAsync不只是完成并拆除我的FileSystemWatcher? 我可以一直触发观察者,直到按下 Ctrl+C 取消令牌并停止整个应用程序。

0 投票
1 回答
154 浏览

c# - 获取托管服务实例失败(手动启动托管服务.net core 3.1)

我在 .net core 2.2 中有 api 项目和测试项目。现在我已经在 .net core 3.1 中迁移了这两个项目

在测试项目中,我有“初始化”方法,我在其中手动添加服务

在 .net core 2.2 中,上述代码运行良好,但迁移后“GetService”方法总是返回“null”。

我在下面的问题中尝试了接受的答案。它在 .net core 2.2 中工作,但在 .net core 3.1 托管服务集成测试 .Net-Core中不工作

任何人都可以建议我应该对 .net core 3.1 的上述代码进行哪些更改?

0 投票
0 回答
130 浏览

asp.net-core - “'对象引用未设置为对象的实例”当我启动应用程序时

我有一些类实现了 IHostedService。

电子邮件发送服务:

创建活动任务:

我使用两个扩展函数在 startup.cs -> ConfigureServices 中添加这些类:

但是如果我这样使用,程序就不会运行。当我启动它时,此代码会引发错误:

错误详情:

如果我评论

services.AddHostedService();

我仍然得到错误。但是,如果我评论所有“CreateActivityTask”类和“services.AddHostedService();”,那么我可以运行该应用程序。

EmailTask​​Service 可以正常运行。但是,如果我单独留下“CreateActivityTask”(我的意思是,我评论了所有“EmailTask​​Service 类等..),程序会再次出错。

我在 CreateActivity 类上看不到任何错误,所以我找不到错误在哪里。请问你能帮帮我吗?

0 投票
1 回答
145 浏览

c# - 并行启动 AddHostedService 服务

在 .NET Core 3.1 (Console) 应用程序中,是否可以通过AddHostedService并行添加来启动服务?

实际上我添加的两个服务似乎是在同步模式下启动的(一个接一个)我的代码如下:

知道这两种服务都是IHostedService

0 投票
1 回答
169 浏览

.net-core - BackgroundService QueueHostedService

我正在尝试使用 BackgroundService 和 IBackgroundTaskQueue 让服务监控队列以完成工作。我从这里的 MS 文档中的示例开始:https ://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-5.0&tabs=visual-studio#排队后台任务

我的问题是它看起来不像我的 QueueHostedService 曾经启动过。我的断点都没有受到影响。现在,我使用相同的“MonitorLoop”概念来排队工作,即开始并正常工作以排队记录,但它们永远不会出队,并且 QueueHostedService 中的任何内容都不会受到影响(构造函数、ExecuteAsync、BackgroundProcessing)。

据我所知,我的示例代码与文档完全相同,并进行了以下修改:监视器循环是异步的,但它启动良好,所以我认为这不是问题。QueueHostedService 和 BackgroundTaskQueue 与其示例完全相同。服务的添加对我来说几乎是一样的:

这就是我在 Program.cs 中的 Main 方法的样子:

0 投票
4 回答
918 浏览

.net-core - 重写 IHostedService 以在所有任务完成后停止

我有一个应用程序,它通常应该是一个简单的控制台应用程序,被编程为 Windows 任务调度程序不时调用的计划任务。

该程序应该在两个数据库上启动一些更新,每个数据库一个服务。说ContosoDatabase应该由ContosoService.

最后,它被编写为一个 .NET Core 应用程序,使用s 作为服务的基础,这可能不是最佳选择,如下所示:IHostedService

我像这样从 main 调用它:

现在,问题肯定是,一旦所有更新完成,应用程序就不会停止。

有没有办法快速重写应用程序以使其在第二个服务完成其任务后停止?

我试图Environment.Exit(0);

但这似乎没有帮助:所有任务完成后应用程序仍在运行。

0 投票
1 回答
252 浏览

c# - 可使用 IHostedService 取消任务并从服务外部启动/停止

我的应用程序中有一个IHostedService。它启动了一个 Discord 聊天机器人和一个处理实时数据的交易机器人。一旦应用程序加载(IHostApplicationLifetime.ApplicationStarted),它们都会启动。

Discord 聊天机器人正在一个单独的线程中启动,因为它必须在整个应用程序中都处于活动状态。它应该控制交易机器人。我的意思是用户可以发送 /startbot、/stopbot、/help 等命令。

交易机器人是应用程序的主要逻辑。它基本上连接到 Binance Web 套接字流并处理实时数据。

问题

  1. 当我这样做时Ctrl + C, OnStopping 被执行,但它永远不会到达 OnStopped 或停止应用程序,因为ITradeManager.Run它正在运行一个无限循环。

注意:我没有使用 BackgroundService 的原因是因为这些 ITradeManager 和 IDiscordCommandHandler 应该在应用程序加载后启动(IHostApplicationLifetime.ApplicationStarted)。

  1. 我希望能够ITradeManager.Run从外部启动/停止,更具体地说是从BotControlModule

片段

0 投票
1 回答
572 浏览

.net - 如何使用 IHostedService 访问控制台应用程序中的命令行参数?

我不知道如何在我的ConsoleHostedService实现类中访问命令行参数。我在源代码中看到以CreateDefaultBuilder(args)某种方式将其添加到配置中...命名Args...

拥有主程序:

和托管服务:

0 投票
1 回答
2150 浏览

c# - .NET 5 托盘图标在 C# Windows 服务中的使用

我搜索了当前在 .NET 环境中处理 Windows 系统/托盘图标的最佳实践,但没有找到任何最新信息。

考虑通常的 .NET 5 项目配置:

使用以下代码(Program.cs):

你能帮我在 C# 中实现一个简单的“Hello World”上下文菜单窗口系统托盘图标和/或给我一些关于最先进的尝试图标使用的文档吗?

IHostedService甚至是最好的考虑的实施?如何引用 Windows API?我需要一个net5.0-windows项目吗?

提前致谢!

0 投票
1 回答
81 浏览

.net-core - 通过 DI 在 IHostedService 中利用用户上下文

我有一系列用于asp.net-core中间件和IHostedService.

要获取用户上下文,我可以注入IHttpContextAccessor来获取HttpContext用户:

为了更抽象一点,我有IUserAccessor一个HttpUserAccessor实现:

然后MyLibrary不需要IHttpContextAccessor依赖:

IHostedService正在从队列中弹出消息,其中消息包括:

  • 用户上下文,以及
  • 一个序列化SomeObject的传递给MyLibrary.DoWorkAsync

所以,像:

所以,我的问题是,如何以这样一种方式MyHostedService存储,以便自定义可以通过 DI 以线程安全的方式访问它?message.User IUserAccessor