为什么此代码段在重负载下返回 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

给定您发布的代码,答案是:它不会。

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

如果你在你

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

我建议对所讨论的多线程功能进行彻底审查:您看到的问题不在那行代码中。

两种铸件是不同的,根据本文

http://www.codeproject.com/Articles/8052/Type-casting-impact-over-execution-performance-in

使用 as 关键字更快,我认为这与返回值总是与前缀转换相比有关。

但是,我认为您需要仔细检查如何实现该方法GetUserBaseById(userId)因为我怀疑它可能无法正确实现多线程环境。