В чем разница между этими способами запуска / запуска общего хоста в ASP.NET Core? - PullRequest
0 голосов
/ 19 сентября 2018

Хостинг в ASP.NET Core теперь имеет новый базовый хост (.NET Core 2.1+), который в будущем заменит веб-хост.

Существует множество способов запуститьприложение, использующее интерфейсы Microsoft.Extensions.Hosting IHost и IHostBuilder.

Я знаю разницу между использованием async против sync, но каковы различия между всеми этими параметрами?Использование Run против Start и вызов IHostBuilder против вызова IHost?

См. Параметры // 1, // 2, // 3 и // 4 в приведенном ниже коде:

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>();
            });
    }
}

1 Ответ

0 голосов
/ 19 сентября 2018

// 1 - вызов Run на компоновщике (асинхронный)

RunConsoleAsync включает поддержку консоли, создает и запускает хост и ожидает завершения работы Ctrl + C / SIGINT или SIGTERM для закрытиявниз.Как и следует из его названия, оно предназначено для размещения вашего приложения только в консоли (не в IIS и т. Д.)

// 2 - вызовите запуск в компоновщике (синхронизация)

только синхронно запускает хост

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

// 3 - Выполнение вызова на хосте (синхронизация / асинхронизация)

RunAsync запускает приложение и возвращает задачу, котораязавершается при срабатывании токена отмены или выключения.Синхронизация - это просто оболочка:

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

// 4 - запуск вызова на хосте (синхронизация / асинхронизация)

Этот метод фактически запускает программу, и онв конечном итоге вызывается из любых других способов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...