SignalR - 启动时的长 运行 任务

SignalR - long running task on start

我正在考虑在 SignalR 启动时启动一个较长的 运行ning 任务,然后将数据从它发送到客户端。

据我所知,运行 启动代码位于 Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) 方法内。

当使用 ASP.NET SignalR 时,我可以使用以下方式将消息发送到前端:

var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.Send("Admin", "message");

ASP.NET Core SignalR 中,通过注入 IHubContext see 实现相同的效果。但是我不能在 Configure 方法中使用它,因为不可能向其中注入任何东西。

我在哪里可以在 SignalR 启动时调用的方法中注入 IHubContext 以便我可以启动长 运行ning 任务?

我认为最好的方法是使用 hosted-service。你可以这样做:

internal class MySignalRService : IHostedService, IDisposable
{
    private readonly IHubContext _hubContext;

    public MySignalRService(IHubContext hubContext)
    {
        _hubContext = hubContext;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        //Setup some scheduler to do your job

        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
    }

    public void Dispose()
    {
    }
}

然后

services.AddHostedService<MySignalRService>();