SignalR - длительное задание на старте - PullRequest
0 голосов
/ 11 марта 2019

Я планирую запустить долгосрочное задание при запуске 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 , см. . Но я не могу использовать это в методе Configure, поскольку в него невозможно что-либо ввести.

Где я могу вставить IHubContext в метод, который вызывается при запуске SignalR, чтобы я мог запустить долгосрочное задание?

1 Ответ

0 голосов
/ 11 марта 2019

Я думаю, что лучший подход - использовать 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>();
...