簡體   English   中英

從 Azure 服務總線主題讀取的 Asp.net Core 2.2

[英]Asp.net Core 2.2 read from Azure Service Bus Topic

美好的一天,我正在編寫一個需要從 Azure 服務總線主題讀取數據的應用程序。 注冊函數看起來像這樣(見下文)。 我想在 Asp.net Core 應用程序啟動時運行一次。

既然 IStartupFilter 似乎不支持異步函數,那么調用這個函數的好方法是什么?

任何幫助將不勝感激

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

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

        await subscriptionClient.CloseAsync();
    }

您是否嘗試過創建用於注冊異步函數的接口基本方法,如下所示:

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在應用程序啟動時查找所有已注冊的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);
    }
}

有關詳細步驟,您可以參考文檔。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM