Возврат из асинхронного метода в ядре SignalR Core - PullRequest
0 голосов
/ 06 июня 2019

У меня есть ASP .Net Core 2.2 Web API. В нем я использую SignalR. В моем хабе мне нужно сохранить сообщения в базе данных, поэтому я получаю экземпляр DbContext, и, поскольку я вызываю метод SaveChangesAsync () DbContext, мне нужно сделать метод асинхронным. Итак, с

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 голосов
/ 06 июня 2019

Измените ваш код, как показано ниже:

<strike>return Clients.All.SendAsync("ReceiveMessage", message);</strike>
await Clients.All.SendAsync("ReceiveMessage", message);
...