Dan*_*tte 25 asynchronous asp.net-mvc-4 signalr
我正在关注"SignalR Tutorial": http //www.asp.net/signalr/overview/hubs-api/hubs-api-guide-server
所以让我们假设这个简单的聊天方法:
public void Send(string name, string message)
{
// Call the addNewMessageToPage method to update clients.
Clients.All.addNewMessageToPage(name, message);
}
Run Code Online (Sandbox Code Playgroud)
假设我有一个拥有5万用户的聊天室.将Send方法更改为异步会有什么好处,如下所示:
public async Task Send(string name, string message)
{
// Call the addNewMessageToPage method to update clients.
await Clients.All.addNewMessageToPage(name, message);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
dav*_*owl 43
您应该等待任务的唯一原因是当您使用横向扩展时.默认情况下,内存消息总线返回一个已完成的任务,因为操作速度非常快,没有必要使其异步,但如果您愿意,则可以.回答你的问题:
我们不会在进行方法调用的同一个调用堆栈上发送给客户端(例如,除了发布到消息总线之外,Clients.All.addNewMessage不会等待任何事情).没有请求线程会等待客户端接收任何东西(我们不支持等待客户端在SignalR中获取正常调用的消息).
即使您不在呼叫站点使用等待,它始终是异步的.我们有一个消息代理,实际上是写客户端.当您调用该方法时,您只是将消息放入缓冲区.在将来的某个时间,该消息将传递给客户.
在扩展方案中,调用客户端方法会向外部服务(sql,redis,服务总线)发送消息,并且可能会失败,因此您希望等待任务以便观察异常.
希望有所帮助
| 归档时间: |
|
| 查看次数: |
8056 次 |
| 最近记录: |