You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:50:14