Was ist der Unterschied zwischen diesen Möglichkeiten zu starten / einer Generic Host in ASP.NET-Core laufen?

stimmen
4

Das Hosting-Design in den ASP.NET-Core hat einen neuen Generic Host jetzt (.NET-Core 2.1+), die den Web-Host in der Zukunft ersetzen wird.

Es gibt viele Möglichkeiten , um die Anwendung unter Verwendung der Start - Microsoft.Extensions.HostingSchnittstellen IHostund IHostBuilder.

Ich kenne den Unterschied zwischen der Verwendung von asyncvs sync, aber was sind die Unterschiede zwischen all diesen Optionen? Mit Runvs Startund fordert IHostBuildervs fordert IHost?

Siehe die Optionen // 1, // 2, // 3und // 4in dem folgenden Code:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace MyNamespace
{
    class Program
    {
        static async Task Main(string[] args)
        {
            IHostBuilder builder = CreateBuilder();

            // 1 - Call Run on the builder (async)
            await builder.RunConsoleAsync();    // extension method

            // 2 - Call Start on the builder (sync)
            builder.Start();                    // extension method

            IHost host = builder.Build();       // Call Build on the builder to get a host

            // 3 - Call Run on the host (sync / async)
            host.Run();                         // extension method
            await host.RunAsync();              // extension method

            // 4 - Call Start on the host (sync / async)
            host.Start();                       // extension method
            await host.StartAsync();            // class method
        }

        private static IHostBuilder CreateBuilder() => new HostBuilder()
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                //...
            })
            .ConfigureLogging((hostingContext, logging) => {
                //...
            })
            .ConfigureServices((hostContext, services) =>
            {
                //...
                services.AddSingleton<IHostedService, MyService>();
            });
    }
}
Veröffentlicht am 19/09/2018 um 19:29
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
7

// 1 - Rufen Sie Run auf den Erbauer (async)

RunConsoleAsync ermöglicht Konsolenunterstützung, baut und startet den Host und wartet auf Strg + C / SIGINT oder SIGTERM herunterzufahren. So, wie es aus seinem Namen erwartet wird, es ist nur für Ihre Anwendung in der Konsole-Hosting (nicht IIS, etc.)

// 2 - Rufen Sie Start in dem Builder (sync)

gerade startet den Host synchron

public static IHost Start(this IHostBuilder hostBuilder)
{
    var host = hostBuilder.Build();
    host.StartAsync(CancellationToken.None).GetAwaiter().GetResult();
    return host;
}

// 3 - Call Run auf dem Host (Sync / Async)

RunAsync läuft die App und gibt eine Aufgabe, wenn die Annullierung Token oder Herunterfahren abgeschlossen ausgelöst wird. Sync ist nur ein Wrapper:

public static void Run(this IHost host)
{
    host.RunAsync().GetAwaiter().GetResult();
}

// 4 - Aufruf starten auf dem Host (Sync / Async)

Diese Methode wird tatsächlich beginnen, das Programm und es wird schließlich von irgendwelchen anderen Arten aufgerufen.

Beantwortet am 19/09/2018 um 20:02
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more