让 SignalR 在不总是 运行 的代码中永远监听
Keep SignalR listening forever in a code that is not always running
我在 asp.net 核心应用程序中使用 signalR 核心。该代码不包含任何无限循环,因此它会在某个时候结束。如何在不使用无限循环的情况下让 signalR 永远监听并在收到消息时执行函数?我是运行raspberry pi上的代码,所以硬件资源有限,循环不是一个好的选择;
当需要来自 signalR 的数据的部分被放入 while(true) 时,代码工作;但是 raspberry pi
很重
connection = new HubConnectionBuilder()
.WithUrl("http://192.168.1.20:1234/getChoice")
.Build();
connection.Closed += async (error) =>
{
await Task.Delay(new Random().Next(0, 5) * 1000);
await connection.StartAsync();
};
connection.On<string, string>("ReceiveMessage", (user, message) =>
{
controlSensors(message.ToString());
});
await connection.StartAsync();
我希望代码继续侦听任何新选择以执行 controlSensors 方法中的预期功能;实际结果是代码直接结束了,因为显然在代码启动的那一秒没有收到任何消息
您可以在程序末尾的 while 循环中写入 Console.Read()
或 Console.ReadLine()
。这样 while 循环就不会消耗 CPU 资源。
while(true)
{
Console.Read();
}
该代码托管在服务器上并且有效。应该是服务器端。
我在 asp.net 核心应用程序中使用 signalR 核心。该代码不包含任何无限循环,因此它会在某个时候结束。如何在不使用无限循环的情况下让 signalR 永远监听并在收到消息时执行函数?我是运行raspberry pi上的代码,所以硬件资源有限,循环不是一个好的选择;
当需要来自 signalR 的数据的部分被放入 while(true) 时,代码工作;但是 raspberry pi
很重connection = new HubConnectionBuilder()
.WithUrl("http://192.168.1.20:1234/getChoice")
.Build();
connection.Closed += async (error) =>
{
await Task.Delay(new Random().Next(0, 5) * 1000);
await connection.StartAsync();
};
connection.On<string, string>("ReceiveMessage", (user, message) =>
{
controlSensors(message.ToString());
});
await connection.StartAsync();
我希望代码继续侦听任何新选择以执行 controlSensors 方法中的预期功能;实际结果是代码直接结束了,因为显然在代码启动的那一秒没有收到任何消息
您可以在程序末尾的 while 循环中写入 Console.Read()
或 Console.ReadLine()
。这样 while 循环就不会消耗 CPU 资源。
while(true)
{
Console.Read();
}
该代码托管在服务器上并且有效。应该是服务器端。