为什么此代码段在重负载下返回 null
本文关键字:负载 返回 null 代码 为什么 | 更新日期: 2023-09-27 18:22:20
if (this.UserManagmentType != UserMgmtType.NONE)
{
return (User)GetUserBaseById(userId);
}
if (this.UserManagmentType != UserMgmtType.NONE)
{
return GetUserBaseById(userId) as User;
}
我了解演员之间的区别。如果强制转换失败,第一个 if 语句应引发无效的强制转换异常,而第二个语句将返回 null。
我的问题是,对于多线程环境中负载繁重的相同数据,为什么第一个 if 语句偶尔返回 null,而第二个 if 语句总是返回有效数据?
另一个需要注意的项是包含方法是 WCF 终结点。
感谢您的任何见解。
给定您发布的代码,答案是:它不会。
第一个代码段将返回 null
当(且仅当(GetUserBaseById
返回 null。如果方法的返回null
或不是User
对象,则第二个将返回null
。该行为在重负载下不会改变。
描述的重负载下看到不同的结果,那么我建议你在代码的其他地方有一个多线程问题,而这正是你看到效果的地方。这种错误可能对外部条件非常敏感,并且不能保证每次运行时它都会以相同的方式重现(因为它可能对与其他进程的磁盘争用敏感(。
我建议对所讨论的多线程功能进行彻底审查:您看到的问题不在那行代码中。
两种铸件是不同的,根据本文
http://www.codeproject.com/Articles/8052/Type-casting-impact-over-execution-performance-in
使用 as 关键字更快,我认为这与返回值总是与前缀转换相比有关。
但是,我认为您需要仔细检查如何实现该方法GetUserBaseById(userId)
因为我怀疑它可能无法正确实现多线程环境。