我正在asp.net核心应用程序中使用signalR核心。该代码不包含任何无限循环,因此它将在某个时候结束。在不使用无限循环的情况下接收消息时,如何使signalR永久监听并执行功能?我在树莓派上运行代码,因此硬件资源有限,循环不是一个好选择;
将需要从signalR获得数据的部分放入一会儿(true)时起作用的代码;但对于树莓派来说很重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();
}