【问题标题】:Returning from an async method in a SignalR Core hub从 SignalR Core 集线器中的异步方法返回
【发布时间】:2019-10-21 18:11:47
【问题描述】:

我有一个 ASP .Net Core 2.2 Web API。在其中我使用的是 SignalR。在我的集线器中,我需要将消息保存到数据库,所以我得到了一个 DbContext 实例,并且因为我正在调用 DbContext 的 SaveChangesAsync() 方法,所以我需要使该方法异步。所以,从

public Task SendMessageToAll(string message)
{
    return Clients.All.SendAsync("ReceiveMessage", message);
}

我现在有

    public async Task SendMessageToAll(string message)
    {
        using (var scope = _serviceProvider.CreateScope())
        {
            var dbContext = scope.ServiceProvider.GetRequiredService<DbContext>();
            Message newMessage = new Message()
            {
                Body = message,
                Timestamp = DateTime.Now
            };

            dbContext.Messages.Add(newMessage);
            await dbContext.SaveChangesAsync();
        }
        return Clients.All.SendAsync("ReceiveMessage", message);
    }

但是,现在我收到了这个错误:

由于 'ChatHub.SendMessageToAll(string)' 是一个返回 'Task' 的异步方法,return 关键字后面不能跟对象表达式。您是否打算返回“任务”?

这是有道理的,但我不知道如何解决它。有什么想法吗?

【问题讨论】:

    标签: signalr asp.net-core-webapi signalr-hub


    【解决方案1】:

    如下修改你的代码:

    return Clients.All.SendAsync("ReceiveMessage", message); 等待 Clients.All.SendAsync("ReceiveMessage", message);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多