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>();
我正在考虑在 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>();