0

我知道这是在各种情况下提出的,但我没有找到这个确切的问题或令人满意的答案,抱歉,如果我不够谨慎的话。

症状:

当有嵌套对象时,就像Class A引用Class BClass C一个函数一样MyCall(),我必须调用这个函数,但我不能确定是否有任何类被释放或为空,我通常使用Null-Conditional Operaton作为简化称呼:

myClassC?.myClassB?.myClassC?.MyCall();

这通常工作得很好,但在极少数情况下,运行会以NullReferenceException.

例如,当ClientSession?.WebsocketConnection?.SocketConnection?.Disconnect()在代码中的某处调用以断开客户端套接字时,就会发生这种情况,但是当此调用异步运行时,客户端远程断开连接,例如SocketConnection类被释放。

所以竞争条件会导致一种情况,当 null 检查实际上可以到达最后的函数调用时,但是当执行发生时,链中的任何对象都变为 null,因此该方法无法执行,因此导致NullReferenceException.

问题:

避免这种情况的正确方法应该是什么?不使用try/catch,因为这是一个性能敏感的应用程序,而且关于我的基准测试,捕获这样的错误有点昂贵。

如果任何对象为空,是否有任何适当的方法可以取消执行?

感谢您的帮助。

4

0 回答 0