Ответ 1
Единственная причина, по которой вы должны ждать выполнения задачи, - это использование масштабирования. По умолчанию шина сообщений в памяти возвращает завершенную задачу, потому что операция выполняется так быстро, что нет смысла делать ее асинхронной, но вы можете, если хотите. Чтобы ответить на ваши вопросы:
-
Мы не отправляем клиентам в тот же стек вызовов, что и вызов метода (например, Clients.All.addNewMessage не ждет ничего, кроме публикации на шине сообщений). Ни одна строка запроса не будет ждать, когда клиенты получат что-либо (мы не поддерживаем ожидание на клиенте, получая сообщение в SignalR для обычных вызовов).
-
Он всегда асинхронный, даже если вы не используете его на сайте вызова. У нас есть брокер сообщений, который фактически пишет письма клиентам. Когда вы вызываете этот метод, вы просто помещаете сообщение в буфер. В какое-то время в будущем это сообщение доставляется клиентам.
В сценарии масштабирования вызов клиентского метода отправляет сообщение внешней службе (sql, redis, служебную шину), и это может быть неудачно, поэтому вы хотите ждать задачи, чтобы наблюдались исключения.
Надеюсь, что поможет