.NET Generic Host не утилизирует все зарегистрированные экземпляры IhostedService при выключении хостаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 .NET Generic Host не утилизирует все зарегистрированные экземпляры IhostedService при выключении хоста

Сообщение Anonymous »

У меня есть приложение для консоли .net 8.0, которое использует Generic Host .net (Microsoft.extensions.hosting 8.0.0 Nuget Package).
Я вводил образцы службы, которая реализует Idisposable. Когда я закрываю свое заявление с помощью ctrl+c dispose (), не требуется для моей службы. Я нашел для него два обходных пути (через ihostapplicationLifetime и через host.dispose ()). < /P>
Но я все еще не понимаю, зачем мне они вообще нужны? Почему ihost не утилизирует все зарегистрированные экземпляры ihostedService при выключении хоста?
Мой пример кода: < /p>
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()");
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... ces-on-hos
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»