Asp. net Core 2.2 прочитано с Azure Тема служебной шины - PullRequest
0 голосов
/ 08 января 2020

Добрый день, я пишу приложение, которое должно считывать данные с Azure служебной шины topi c. Функция регистрации выглядит следующим образом (см. Ниже). Я хотел бы запустить это один раз при запуске приложения Asp. net Core.

Какой хороший способ вызвать эту функцию, поскольку кажется, что IStartupFilter не поддерживает асин c функции?

Любая помощь будет принята с благодарностью

    async Task RegisterForMessages()
    {
        subscriptionClient = new SubscriptionClient(constring, TopicName, SubscriptionName);

        // Register subscription message handler and receive messages in a loop
        RegisterOnMessageHandlerAndReceiveMessages();

        await subscriptionClient.CloseAsync();
    }

1 Ответ

0 голосов
/ 08 января 2020

Вы пытались создать интерфейсный подход для регистрации функции Asyn c, как показано ниже:

public interface IStartupAction
{
    Task ExecuteAsync(CancellationToken cancellationToken = default);
}

И метод регистрации задач запуска с контейнером DI:

public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddStartupTask<T>(this IServiceCollection services)
        where T : class, IStartupTask
        => services.AddTransient<IStartupAction, T>();
}

Наконец, мы добавляем метод расширения, который находит все зарегистрированные IStartupAction при запуске приложения, запускает их по порядку и затем запускает IWebHost:

public static class StartupTaskWebHostExtensions
{
    public static async Task RunWithTasksAsync(this IWebHost webHost, CancellationToken cancellationToken = default)
    {
        // Load all tasks from DI
        var startupTasks = webHost.Services.GetServices<IStartupAction>();

        // Execute all the tasks
        foreach (var startupTask in startupTasks)
        {
            await startupTask.ExecuteAsync(cancellationToken);
        }

        // Start the tasks as normal
        await webHost.RunAsync(cancellationToken);
    }
}

За подробными инструкциями вы можете обратиться к этому do c.

Надеюсь, это поможет.

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