gpt4 book ai didi

c# - 为什么此代码段在重负载下返回null?

转载 作者:行者123 更新时间:2023-12-03 13:19:52 25 4
gpt4 key购买 nike

if (this.UserManagmentType != UserMgmtType.NONE)
{
return (User)GetUserBaseById(userId);
}

if (this.UserManagmentType != UserMgmtType.NONE)
{
return GetUserBaseById(userId) as User;
}

我了解类型转换之间的区别。如果强制转换失败,则第一个if语句应引发无效的强制转换异常,而第二个if语句将返回null。

我的问题是,对于多线程环境中重载下的相同数据, 是为什么,为什么第一个if语句偶尔返回空值,而第二个if语句总是返回有效数据?

另一个需要注意的事项是,包含方法是WCF端点。

谢谢您的任何见解。

最佳答案

根据您发布的代码,答案是:不会。

当(且仅)null返回null时,第一个代码片段将返回GetUserBaseById。如果方法的返回值是null或它不是null对象,则第二个方法将返回User。在重负载下,这种行为不会改变。

如果您在描述的繁重负载下看到了不同的结果,那么我建议您在代码的其他地方遇到多线程问题,这恰好是您看到效果的地方。这种错误可能对外部条件非常敏感,并且不能保证每次运行时都会以相同的方式重现(因为它可能对例如与其他进程的磁盘争用很敏感)。

我建议对有问题的多线程功能进行彻底的回顾:您所看到的问题不在该行代码中。

关于c# - 为什么此代码段在重负载下返回null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25887671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com