在这种情况下,如何长时间运行SignalR Hub?我想将数据从异步IoT集线器接收器广播到所有连接到集线器的客户端,但是我只希望有1个线程正在运行并发送数据(IoT中心限制了5个侦听器)。
除了用户连接和断开连接时偶尔会出现“集线器已放置”异常(除了客户端号从1更改为0或从0更改为1时(即线程启动和停止时,会发生错误)之外,此代码还能正常工作)
public override Task OnDisconnectedAsync(Exception exception)
{
if (UserHandler.ConnectedIds.Count)
{
UserHandler.Remove(Context.ConnectionId);
numberOfUsers = UserHandler.ConnectedIds.Count;
}
else
{
UserHandler.Remove(Context.ConnectionId);
}
return base.OnDisconnectedAsync(exception);
}
public override Task OnConnectedAsync()
{
UserHandler.ConnectedIds.Add(UserHandler.Create(Context.ConnectionId, "connectionString"));
System.Diagnostics.Trace.WriteLine("User connected!");
return base.OnConnectedAsync();
}
public void Send()
{
if (UserHandler.ConnectedIds.Count==1)
{
thread = new Thread(() => SendMessage());
thread.Start();
}
}
public void SendMessage()
{
while (UserHandler.ConnectedIds.Count > 0)
{
Task<string> getData = recieveFromDevice.ReceiveMessagesFromDeviceAsync(eventHubReceiver, "3");
var receivedList = JsonConvert.DeserializeObject<List<Variable>>(getData.Result);
if (UserHandler.ConnectedIds.Count != 0)
{
Clients.All.SendAsync("Send", receivedList);
}
}
}
}
我已经阅读了有关使用Hub上下文的文档,但是当我从Hub方法启动线程时,我不确定如何在此处使用它。有更好的方法吗?
答案 0 :(得分:0)
研究完StockTicker应用程序后,我可以通过创建其他类来解决我的问题,该类可以处理长时间运行的过程(将数据从IoT中心广播到所有连接的客户端)。如果有人遇到这样的问题,我将发布经过编辑的代码。 谢谢@Glen Ferrie