в настоящее время я использую этот код для отправки каждому клиенту немного другого сообщения. Когда есть более 100 клиентов, этот же код без задачи блокирует мой цикл таймера, и я подозреваю, что он также блокирует все веб-запросы.
ConcurrentDictionary Sessions;
// ...
var context = GlobalHost.ConnectionManager.GetHubContext<TiHub>();
foreach(var kp in Sessions)
{
var client = context.Clients.Client(kp.Key);
if (client != null)
{
client.changed(new Data{ data=somevalue(kp.Value) });
}
}
Асинхронная версия
var context = GlobalHost.ConnectionManager.GetHubContext<TiHub>();
return Task.Run(() =>
{
Parallel.ForEach(Sessions, kp =>
{
var client = context.Clients.Client(kp.Key);
if (client != null)
{
client.changed(new Data{ data=somevalue(kp.Value) });
}
});
});
Я хотел бы, чтобы задача или асинхронная версия «изменились». Что-то типа:
client.changedAsync(new Data{ data=somevalue(kp.Value) });
Поддерживается ли это в SignalR?