【问题标题】:SignalR - long running task on startSignalR - 启动时长时间运行的任务
【发布时间】:2019-03-11 19:16:48
【问题描述】:

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

据我所知,在启动时运行代码的位置在 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,以便我可以启动长时间运行的任务?

【问题讨论】:

标签: c# asp.net-core asp.net-core-signalr


【解决方案1】:

我认为最好的方法是使用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>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多