SignalR HubConnection.On<>()调用歧义错误(CS0121)求助
解决SignalR中CS0121方法调用歧义错误
这个错误的核心是编译器无法区分HubConnectionExtensions.On的两个重载:一个接受同步委托Action<T>,另一个接受异步委托Func<T, Task>。你的ReceiveAcknowledgementRequest这类方法的签名让编译器无法自动推断匹配哪个重载,需要手动明确指定。
解决方法分两种场景:
场景1:处理方法是同步的(返回void)
显式强制转换委托类型为Action<T>,让编译器明确选择同步重载:
Connection.On<ViewAcknowledgementRequestSpecifier>( "ReceiveAcknowledgementRequest", (Action<ViewAcknowledgementRequestSpecifier>)ReceiveAcknowledgementRequest); Connection.On<ViewDelayRequestSpecifier>( "ReceiveDelayRequest", (Action<ViewDelayRequestSpecifier>)ReceiveDelayRequest); Connection.On<InfoRequestSpecifier>( "ReceiveInfoRequest", (Action<InfoRequestSpecifier>)ReceiveInfoRequest);
场景2:处理方法是异步的(返回Task)
显式强制转换委托类型为Func<T, Task>,指定异步重载:
Connection.On<ViewAcknowledgementRequestSpecifier>( "ReceiveAcknowledgementRequest", (Func<ViewAcknowledgementRequestSpecifier, Task>)ReceiveAcknowledgementRequest); Connection.On<ViewDelayRequestSpecifier>( "ReceiveDelayRequest", (Func<ViewDelayRequestSpecifier, Task>)ReceiveDelayRequest); Connection.On<InfoRequestSpecifier>( "ReceiveInfoRequest", (Func<InfoRequestSpecifier, Task>)ReceiveInfoRequest);
替代方案:用Lambda表达式包裹
也可以通过Lambda表达式让编译器自动推断正确的重载,代码更简洁:
- 同步场景:
Connection.On<ViewAcknowledgementRequestSpecifier>( "ReceiveAcknowledgementRequest", spec => ReceiveAcknowledgementRequest(spec));
- 异步场景:
Connection.On<ViewAcknowledgementRequestSpecifier>( "ReceiveAcknowledgementRequest", async spec => await ReceiveAcknowledgementRequest(spec));
内容的提问来源于stack exchange,提问作者user173092
相关产品推荐
相关产品推荐

