Это простое решение работает для меня.Я не добавил ничего лишнего к классу запуска.
РЕДАКТИРОВАТЬ После некоторого размышления я решил, что хотя этот код работает, это не очень хорошая модель, не в последнюю очередь потому, что статический код заканчиваетсяпытаясь использовать поля в расположенном объекте.Концентратор - это легкий, недолговечный контейнер, который следует использовать как таковой.Поэтому я перемещаю свой длительный процесс из статических элементов концентратора в шаблон IHostedService
Мой концентратор содержит длительный асинхронный процесс, определенный в статическом члене.Поскольку концентраторы являются временными, в некоторых случаях концентратор удаляется, когда асинхронный процесс пытается отправить сообщения.Я добавил контекстный концентратор для инъекции в конструктор концентратора
public class IisLogFileHub : Hub
{
IHubContext<IisLogFileHub> _hubContext = null;
public IisLogFileHub(IHubContext<IisLogFileHub> hubContext)
{
_hubContext = hubContext;
}
}
В любой момент длительного процесса сообщения можно отправлять следующим образом:
await _hubContext.Clients.All.SendAsync("ReceiveMessage", msg);