从SignalR Core集线器中的异步方法返回

时间:2019-06-06 08:45:26

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

我有一个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关键字后不能跟随对象表达式。您是否打算返回“任务”?

这有道理,但我不确定如何解决。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

按如下所示更改代码:

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