首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在最新的SignalR客户端中,异步/等待在hub.On中被忽略,并按顺序工作?

为什么在最新的SignalR客户端中,异步/等待在hub.On中被忽略,并按顺序工作?
EN

Stack Overflow用户
提问于 2020-05-13 20:09:35
回答 1查看 72关注 0票数 0

我有一个与.NetCore集线器(服务器)通信的Windows3.1Windows服务(客户端)。服务器发送一堆消息,这些消息应该并发地启动一个长期任务,而不会阻塞主线程。为此,我在注册处理程序时使用async/await:

代码语言:javascript
复制
var subscription = _connection
                .On<Launch>(
                    Methods.Launch,
                    async (payload) => await Handler(payload)
                    );

我的处理程序看起来像这样:

代码语言:javascript
复制
    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;
    }

有了异步/等待,我在控制台中等待一些东西,比如

代码语言:javascript
复制
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

但得到的是:

代码语言:javascript
复制
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中实现对传入消息的“并发/非阻塞”处理?

EN

回答 1

Stack Overflow用户

发布于 2020-05-14 18:40:56

事实上,这是消息分派机制的预期行为。解释与以下相关:

#2084#2086,然后是#5351

作为一种变通办法,我已经用下一种方式修改了代码:

代码语言:javascript
复制
var subscription = _connection
            .On<Launch>(
                Methods.Launch,
                payload => { _ = Handler(payload); } // <= here is fire-and-forget stuff
                );

现在它按我需要的方式工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61774273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档