- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定以下使用通用主机的 .NET Core 2.2 控制台应用程序:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace SimpleGenericHost
{
class SimpleHostedService : IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
Console.WriteLine("Service started");
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
Console.WriteLine("Service stopped");
return Task.CompletedTask;
}
}
class Program
{
static async Task Main(string[] args)
{
var host = new HostBuilder()
.ConfigureServices(services =>
{
services.AddHostedService<SimpleHostedService>();
})
.Build();
var runTask = host.RunAsync();
await Task.Delay(5000);
await host.StopAsync();
await runTask;
}
}
}
Service started
Application started. Press Ctrl+C to shut down.
Hosting environment: Production
Content root path: C:\projects\ConsoleApps\SimpleGenericHost\bin\Debug\netcoreapp2.2\
Service stopped
Service stopped
SimpleHostedService.StopAsync
被调用两次。为什么?
IHostedService.StopAsync
的主机只调用一次?
最佳答案
因为它被调用了两次 - 一次是在延迟之后,另一次是在服务实际停止时。它并不意味着在 RunAsync
时被调用用来。
要在超时后停止,请使用带有超时的 CancellationTokenSource 并将其 token 传递给 RunAsync
:
var timeoutCts=new CancellationTokenSource(5000);
await host.RunAsync(timeoutCts.Token);
RunAsync
启动主机,然后等待终止:
await host.StartAsync(token);
await host.WaitForShutdownAsync(token);
IHostApplicationLifetime.StopApplication
来监听终止请求。 .当这种情况发生时,它会调用
StopAsync
本身:
await waitForStop.Task;
// Host will use its default ShutdownTimeout if none is specified.
await host.StopAsync();
StartAsync
而不是
RunAsync
如果您打算自己管理应用程序的生命周期。
RunAsync
来轻松做到这一点。仅在超时后触发,通过
CancellationTokenSource(int)构造函数:
var timeoutCts=new CancellationTokenSource(5000);
await host.RunAsync(timeoutCts.Token);
关于c# - 为什么在调用 IHost.StopAsync 时会调用两次 IHostedService.StopAsync?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57426145/
给定以下使用通用主机的 .NET Core 2.2 控制台应用程序: using Microsoft.Extensions.DependencyInjection; using Microsoft.E
这个问题是关于在 IIS 上运行的 ASP.NET Core 2.2 应用程序,特别是在注册 IHostedService 的实例时。与 DI 容器。 我阅读的每篇文章 IHostedService.
我的代码基本上遵循官方教程,主要目的是收集一个订阅(Constants.UNFINISHEDSUBID)中的所有消息并在另一个订阅上重新发布它们。但目前我面临着一个我无法解决的问题。在我的实现中,调用
我正在构建一个 IHostedService 实现。我的服务做了一些事情,这些事情应该在服务终止时处理,比如在 StartAsync() 中向外部服务注册一些事件处理程序。 现在我想知道,我应该在哪里
我正在调用subscriber.stopAsync().awaitTermminate(),但它永远不会返回。当我暂停调试时,我看到一堆线程“grpc-default-worker-something
本文整理了Java中com.spotify.helios.servicescommon.coordination.ZooKeeperUpdatingPersistentDirectory.stopAs
调查 source code ,StopAsync 的默认超时为 5 秒。 WebHostBuilder提供扩展方法UseShutdownTimeout,方便设置。但是 HostBuilder 不存在
我使用 VS 2022 ASP.NET 6.0 创建了 Minimal API 模板,并添加了一个 BackgroundService 作为 HostedService。我将其部署到 Azure,它可
我是一名优秀的程序员,十分优秀!