iva*_*f81 1 c# .net-core asp.net-core
我有很多服务托管应用程序。它包含ServiceA和ServiceB。他们用以下方法主持AddHostedService:
var hostBuilder = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<ServiceA>();
services.AddHostedService<ServiceB>();
});
using (var host = hostBuilder.Build())
{
host.Start();
host.WaitForShutdown();
}
Run Code Online (Sandbox Code Playgroud)
ServiceB我知道ServiceA 启动后将运行什么。停止服务的顺序是什么?ServiceA停车后能保证停车吗ServiceB?
的实现按照添加顺序开始(IHostedService来源):
Run Code Online (Sandbox Code Playgroud)_hostedServices = Services.GetService<IEnumerable<IHostedService>>(); foreach (var hostedService in _hostedServices) { // Fire IHostedService.Start await hostedService.StartAsync(cancellationToken).ConfigureAwait(false); }
在上面的代码片段中,从 DI 容器中Services.GetService<IEnumerable<IHostedService>>()检索 的所有实现IHostedService,作为IEnumerable<T>. 这些是按注册时排序的。
的实现以相反的顺序停止IHostedService(来源):
Run Code Online (Sandbox Code Playgroud)foreach (var hostedService in _hostedServices.Reverse()) { // ... await hostedService.StopAsync(token).ConfigureAwait(false); // ... }
在您的示例场景中,ServiceA将在 之前开始ServiceB,但会在 之后停止 。 ServiceB
| 归档时间: |
|
| 查看次数: |
446 次 |
| 最近记录: |