現在、このコードを使用して、各クライアントにわずかに異なるメッセージを送信しています。100 以上のクライアントがある場合、タスクのないこの同じコードがタイマー ループをブロックしており、すべての Web 要求もブロックしていると思われます。
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 でサポートされていますか?