.NET Generic Host veräußert nicht alle registrierten IhostedService -Instanzen beim Host -ShutdownC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 .NET Generic Host veräußert nicht alle registrierten IhostedService -Instanzen beim Host -Shutdown

Post by Anonymous »

Ich habe eine .NET 8.0 -Konsolenanwendung, die .NET Generic Host (Microsoft.Extensions.Hosting 8.0.0 Nuget -Paket) verwendet. Wenn ich meine Bewerbung mit Strg+C dispose () schließe, wird mein Dienst nicht aufgerufen. Ich habe zwei Problemumgehungen dafür gefunden (über Ihostapplicationlifetime und über Host.dispon ()). Warum iShost nicht alle registrierten ihostedService -Instanzen beim Herunterfahren des Hosts entsorgen?
Mein Beispielcode: < /p>

Code: Select all

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;

namespace IHostCtrlC;

internal class Program
{
static void Main()
{
var hostBuilder = Host.CreateDefaultBuilder().ConfigureServices(services =>
{
services.AddSingleton();
});
var host = hostBuilder.Build();
host.Start();

//workaround via IHostApplicationLifetime
var hostApplicationLifetime = host.Services.GetRequiredService();
var service1 = host.Services.GetRequiredService();
hostApplicationLifetime.ApplicationStopping.Register(OnShutdown, service1);
//end of workaround via IHostApplicationLifetime

Console.WriteLine(host.Services.GetRequiredService().GetText());
host.WaitForShutdown();

//workaround via host.Dispose()
//host.Dispose();
}

private static void OnShutdown(object toDispose)
{
((IDisposable)toDispose).Dispose();
}
}

internal interface IService1 : IDisposable
{
string GetText();
}

internal class Service1 : IService1
{
public string GetText() => "Text from Service1";
public void Dispose() => Console.WriteLine("Service1.Dispose()");
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post