asp.net-core-signalr – SignalR Core中的SendAsync和SendCoreA
发布时间:2020-12-16 06:40:45 所属栏目:asp.Net 来源:网络整理
导读:当更新到最新版本的ASP Net Core和SignalR核心时,我注意到它们在向客户端发送方法时曾经有两种“发送”方法(曾经是InvokeAsync). 在查看代码注释之后,两个方法在注释中都是相同的,都继承自IClientProxy,并且都接受字符串方法,对象args和取消令牌. 这些方法有
当更新到最新版本的ASP Net Core和SignalR核心时,我注意到它们在向客户端发送方法时曾经有两种“发送”方法(曾经是InvokeAsync).
在查看代码注释之后,两个方法在注释中都是相同的,都继承自IClientProxy,并且都接受字符串方法,对象args和取消令牌. 这些方法有什么不同?如果有的话?什么时候应该使用? 解决方法
在
https://github.com/aspnet/SignalR/issues/2239#issuecomment-387854470引用@anurse:
简短的回答是:除非你真的知道你在做什么,否则应该忽略核心方法. 更多背景知识: 我们从SendAsync开始,它接受一组参数发送: public void SendAsync(string method,object[] args); Clients.All.SendAsync("Method",new object[] { arg1,arg2,arg3 }); 显然,每次都必须创建一个数组是一件痛苦的事.很容易解决的问题是使用参数: public void SendAsync(string method,params object [] args); Clients.All.SendAsync("Method",arg1,arg3); 但是,当您确实想要将数组作为单个参数发送时,这会分崩离析 public void SendAsync(string method,params object[] args); var arg1 = new object[] { a,b,c }; Clients.All.SendAsync("Method",arg1); // C# 'params' expands this into the below Clients.All.SendAsync("Method",a,c); 因此,我们不是发送一个数组a,c的单个参数,而是将每个参数作为单独的参数发送.这让用户感到困惑. 所以我们从中删除了params,而是生成了一大堆支持多个参数的扩展方法: public void SendAsync(string method,object[] args); public void SendAsync(string method,object arg1) => SendAsync(method,new object[] { arg1 }); public void SendAsync(string method,object arg1,object arg2) => SendAsync(method,arg2 }); // ... etc ... 但是当你有这样的代码时,仍然存在歧义: public void SendAsync(string method,new object[] { arg1 }); var arg = new object[] { a,c } Clients.All.SendAsync("method",arg); 同样,将选择带有object []的重载(请参阅SharpLab上的此插图). 因此,我们将一个数组重命名为SendCoreAsync: public void SendCoreAsync(string method,object arg1) => SendCoreAsync(method,c } // No ambiguity here! Clients.All.SendAsync("method",arg); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- [asp.net mvc 奇淫巧技] 02 - 巧用Razor引擎在Action内生成
- asp.net – 有没有理由不接受数据库引擎优化顾问的建议?
- asp.net-mvc – MVC应用程序中的随机数生成
- ASP.NET MVC与WebForms:速度和架构比较
- asp.net-mvc-3 – Hz.Raw()的Razor替代品
- asp.net – 返回状态代码4xx,用于具有无效/不支持的Content
- asp.net – 如何在StackedBar中值为零时隐藏数据点标签
- asp.net-mvc – asp.net mvc5 webapi2,如何通过razor语法获
- asp.net – 从网页打印条形码标签
- ASP.NET WSAT(网站管理工具)和自定义成员资格提供程序
推荐文章
站长推荐
- 【Asp.Net MVC+EF+三层架构】详解(一)初见
- asp.net-mvc – 在Visual Studio中使用TypeScrip
- asp.net-mvc-3 – 重定向(relativeUrl)重定向到I
- asp.net-mvc-3 – Razor View引擎中的全局变量
- asp.net-mvc – 文件上传MVC
- 像ASP.NET WebControls一样,在dll中可重用的ASP.
- asp.net – 从Web服务返回XElement
- asp.net-mvc-3 – 如何让User.Identity在控制器外
- asp.net – 在会话中存储值是否安全?
- asp.net-mvc – 为什么ASP.NET MVC在从IE而不是f
热点阅读