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

GRPC多线程下IInterfacedControl实例属性同步问题求助

多线程下GRPC应用中IInterfacedControl属性同步问题

我正在开发一个GRPC应用,通过接口与多个不同类的对象交互。主类持有一个IInterfacedControl实例,对外通过GetInterfacedControl()方法提供访问:

private IInterfacedControl _interfaceControl;
public IInterfacedControl GetInterfacedControl() => _interfaceControl;

在GRPC服务方法中,我通过调用GetInterfacedControl().SomeProperty来访问控件属性。目前遇到的问题是:当两个请求同时进入时,类的属性值无法同步——部分请求会修改多个属性,虽然已经在类内部对部分变量和方法做了同步处理,但不同线程中类属性值仍出现不一致的情况。


涉及的GRPC服务方法

  • 检查连接状态:定期通过接口类的IsConnected变量检查服务是否已连接
public override Task<IsConnectedResponse> IsConnected(IsConnectedRequest request, ServerCallContext context)
{
    var isConnected = _factory.GetInterfacedControl().IsConnected;
    LogService.LogCallersGetter(isConnected.ToString());
    return Task.FromResult(new IsConnectedResponse { IsConnected = isConnected });
}
  • 尝试连接服务:触发服务连接操作
public override Task<ConnectResponse> AttemptConnect(ConnectRequest request, ServerCallContext context)
{
    string action = $"Connect?: {request.Connect}";
    LogService.LogCallers(action);
    try
    {
        _factory.GetInterfacedControl().Connect(request.Connect);
    }
    catch (Exception ex)
    {
        Logger.Log(LogLevel.Error, ex.Message);
    }
    return Task.FromResult(new ConnectResponse { });
}

第三方服务与属性更新逻辑

应用通过WCF连接第三方服务,当第三方服务连接到我的应用时(通常发生在上述两个方法执行期间),不同线程持有接口类的不同上下文,导致属性值不一致。

有三个入口点会调用RaiseUpdateConnected方法更新IsConnected属性,其中一个入口会在判定未连接时显式调用RaiseUpdateConnected(false):

internal void RaiseUpdateConnected(bool isConnected)
{
    IsConnected = isConnected;
    EUpdateConnected?.Invoke(this, isConnected); 
}

Connect方法中,eventBeacon会在服务建立连接时被订阅,我尝试在此处加锁同步eventBeacon非空的情况:

public void Connect()
{           
    eventBeacon?.Invoke(null, new EventArgs());
    if (eventBeacon == null)
        RaiseUpdateConnected(false);
}

核心需求

调试确认IInterfacedControl只有一个实例,但不同线程的上下文导致属性值不一致。需要找到能同步整个IInterfacedControl类的方法,确保所有线程中变量更新一致。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:37:15