- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 .NET Core 2.2,我想运行一个长时间运行的后台任务(比如旧的 Windows 服务)。我想使用 Microsoft.Extensions.Hosting.BackgroundService
(在 Microsoft.Extensions.Hosting.Abstractions
程序集中)。
我的问题是我的服务立即启动和停止。我写了这个小示例来展示我所做的:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace MyHostedService
{
internal static class Program
{
private static void Main()
{
new HostBuilder()
.ConfigureServices((hostContext, services) => { services.AddHostedService<MyService>(); })
.Build()
.RunAsync();
}
}
public class MyService : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
int count = 0;
while (!stoppingToken.IsCancellationRequested)
{
Console.WriteLine($"Hit count: {++count}, IsCancellationRequested: {stoppingToken.IsCancellationRequested}");
await Task.Delay(TimeSpan.FromSeconds(1));
}
Console.WriteLine($"IsCancellationRequested: {stoppingToken.IsCancellationRequested}");
Console.WriteLine("The end.");
}
}
}
这是输出:
> Hit count: 1, IsCancellationRequested: False
Application started. Press Ctrl+C to shut down.
Hosting environment: Production
Content root path: C:\Users\(personnal path hidden)\MyHostedService\MyHostedService\bin\Debug\netcoreapp2.2\
> IsCancellationRequested: True
> The end.
C:\Program Files\dotnet\dotnet.exe (process 31088) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .
我保证,我没有按 Ctrl+C,也没有按退出键。
我错过了什么吗?您能告诉我要更改什么以确保服务一直运行,直到我按 Ctrl+C 将其停止为止吗?
我希望得到如下所示的结果:
Application started. Press Ctrl+C to shut down.
Hosting environment: Production
Content root path: C:\Users\(personnal path hidden)\MyHostedService\MyHostedService\bin\Debug\netcoreapp2.2\
> Hit count: 1, IsCancellationRequested: False
> Hit count: 2, IsCancellationRequested: False
> Hit count: 3, IsCancellationRequested: False
> Hit count: 4, IsCancellationRequested: False
> Hit count: 5, IsCancellationRequested: False
> Hit count: 6, IsCancellationRequested: False
> Hit count: 7, IsCancellationRequested: False
> Hit count: 8, IsCancellationRequested: False
> Hit count: 9, IsCancellationRequested: False
> Hit count: 10, IsCancellationRequested: False
> Hit count: 11, IsCancellationRequested: False
...(现在我按 Ctrl+C )...
> IsCancellationRequested: True
> The end.
C:\Program Files\dotnet\dotnet.exe (process 31088) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .
最佳答案
您以异步方式运行它,因此一旦您的主要功能结束,应用程序就会退出。这就是要求取消的地方。尝试等待服务:
private async Task Main()
{
await new HostBuilder()
.ConfigureServices((hostContext, services) => { services.AddHostedService<MyService>(); })
.Build()
.RunAsync();
}
关于c# - 为什么我的 BackgroundService 立即停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58434134/
我知道如何在asp.net core中使用后台服务 public class WatchMan : BackgroundService { } 我有一个点核心控制台应用程序,我想作为窗口服务运
我知道如何在asp.net core中使用后台服务 public class WatchMan : BackgroundService { } 我有一个点核心控制台应用程序,我想作为窗口服务运
所以在 MSDN对于 ASP.Net Core,它向您展示了如何使用托管服务创建后台任务。甚至有一个特定的段落解释了如何创建后台队列。 现在我的问题是,ExecuteAsync 方法是否已经在其自己的
我正在使用 .NET Core 2.2,我想运行一个长时间运行的后台任务(比如旧的 Windows 服务)。我想使用 Microsoft.Extensions.Hosting.BackgroundSe
我正在使用 .NET Core 2.2,我想运行一个长时间运行的后台任务(比如旧的 Windows 服务)。我想使用 Microsoft.Extensions.Hosting.BackgroundSe
我有一个后台 worker 实现了 BackgroundService(由 MS 提供)。 看看这个简单的实现: public class MyService : BackgroundService
我在 Asp.Net Core Web API 中实现了一个 Microsoft.Extensions.Hosting.BackgroundService,它在 ExecuteAsync 内部有一个阻
在 ASP.NET Core 上,我观察到一种奇怪的行为,这实际上在 BackgroundService not shutting down, stoppingToken never set with
我创建了 WcBackgroundService(由 BackgroundService 继承)并将其注入(inject)到 OrdersController。当前端 API 在重启端点上发送请求时,
我有一个名为 Worker 的 BackgroundService,我重写了 ExecuteAsync 方法以每 10 秒运行一次。有时,我跑的东西会持续很长时间。在这种情况下,我想终止正在运行的程序
我创建了一个像这样的 BackgroundService: public class CustomService : BackgroundService { protected overrid
我正在开发 .NET Core 3.1 后台服务,该服务将作为守护进程安装在 Debian AWS EC2 实例上。 优雅地关闭守护进程以停止运行任务并完成一些要处理的任务(发送一些事件等)是很重要的
我目前有一个带有 .NET Core SDK v5.0.403 的 ASP.NET Core 应用程序。 在此应用程序中,我定义了多个 BackgroundService,其中之一如下: public
我目前有一个带有 .NET Core SDK v5.0.403 的 ASP.NET Core 应用程序。 在此应用程序中,我定义了多个 BackgroundService,其中之一如下: public
新的 .NET Core“通用主机”似乎是实现运行多个并发任务的控制台应用程序的不错选择。我认为我可以使用 IHostedService(或 BackgroundService)将它们定义为服务,而不
我在 .net 通用主机中托管了一个 BackgroundService,如下所示: var builder = Host.CreateDefaultBuilder(args); builder
我正在尝试启动分配给 IHostBuilder 的 services.HostedService 的 BackgroundService。 IHostBuilder定义: private static
我正在尝试启动分配给 IHostBuilder 的 services.HostedService 的 BackgroundService。 IHostBuilder定义: private static
我创建了一个从 Microsoft.Extensions.Hosting.BackgroundService 继承的辅助服务,然后我通过 visual studio 调试器将其部署到我的 Window
拥有 .net core 版本 3.1.8 和 asp.net core 版本 3.1.8 的 .net core worker 服务 我在从 worker 服务加载用户 secret 时遇到问题,但
我是一名优秀的程序员,十分优秀!