我有一个与SignalR Hub(服务器)通信的.NetCore 3.1 Windows服务(客户端)。服务器发送一堆消息,这些消息应同时启动长期任务,而不阻塞主线程。为此,我在注册处理程序上使用async / await:
var subscription = _connection
.On<Launch>(
Methods.Launch,
async (payload) => await Handler(payload)
);
我的处理程序看起来像:
private async Task<bool> Handler(Payload payload)
{
_logger.LogInformation($"Launch STARTED | Id: {payload.Id}");
await Task.Delay(3000);
_logger.LogInformation($"Launch DONE | Id: {payload.Id}");
return true;
}
具有异步/等待功能,我正在控制台中等待类似的东西
Launch STARTED | Id: 1
Launch STARTED | Id: 2
Launch STARTED | Id: 3
Launch STARTED | Id: 4
Launch DONE | Id: 1
Launch DONE | Id: 3
Launch DONE | Id: 2
Launch DONE | Id: 4
但是得到:
Launch STARTED | Id: 1
Launch DONE | Id: 1
Launch STARTED | Id: 2
Launch DONE | Id: 2
Launch STARTED | Id: 3
Launch DONE | Id: 3
Launch STARTED | Id: 4
Launch DONE | Id: 4
[有趣的是Microsoft.AspNetCore.SignalR.Client ver1.1.0
可以根据需要工作。升级到最新的Microsoft.AspNetCore.SignalR.Client ver3.1.4
后,就会出现这种现象。
是否有一种方法可以在最新的SignalR.Client中实现对传入消息的“并行/非阻塞”处理?