我有一个与.NetCore集线器(服务器)通信的Windows3.1Windows服务(客户端)。服务器发送一堆消息,这些消息应该并发地启动一个长期任务,而不会阻塞主线程。为此,我在注册处理程序时使用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中实现对传入消息的“并发/非阻塞”处理?
https://stackoverflow.com/questions/61774273
复制相似问题