如果 web 服务 returns 的名称真的很慢,是否有机会使 web 服务方法 returns 无效?

Is there any chance that a web service method returns null, if web service returns the names really slow?

我下面有一些愚蠢的代码; School 有 2 个静态成员,Teachers 和 Students,他们的列表是通过构造函数中的 Web 服务调用填充的。

我的问题是"Is there any chance that GetNamesOfTeachers or GetNamesOfStudents return null, if web service returns the names really slow?"

提前感谢您的帮助。

public class School 
{
    private static readonly teachers = new Teachers();
    private static readonly students = new Students();

    public List<string> GetNamesOfTeachers() => teachers.Names;
    public List<string> GetNamesOfStudents() => students.Names;
}
public class Teachers() 
{
    private readonly List<string> _names;
    public List<string> Names => _names;

    public Teachers() => _names = GetTeachersFromService(); // Synchronous call to web service
}
public class Students() 
{
    private readonly List<string> _names;
    public List<string> Names => _names;

    public Students() => _names = GetStudentsFromService(); // Synchronous call to web service
}

假设网络服务器没有超时并且您的调用是同步的,这些函数不应该 return null 除非它被编程为 return null。

这完全取决于 GetTeachersFromService() 的实现方式。如果该方法如下所示,则 GetNamesOfTeachers 将 return null.

public List<string> GetTeachersFromService()
{
     // Call web service    
     if (webServiceResponse.teachers.count > 0)
          return webServiceResponse.teachers;
     else return null; 
}

如果上述方法在 else 部分有 return List<string>(); 那么您将从 GetNamesOfTeachers 获得非空空列表。

我不知道您的 GetTeachersFromService() 和 GetStudentsFromService() 客户端代码(代理)是如何实现的。但通常即使同步调用这些函数,您也可以设置超时。如果服务在指定时间内没有响应,您将得到一个异常,您可以在代码中处理该异常,例如

try {
     _names = GetTeachersFromService(); // Synchronous call to web service }

catch(Exception ex){
                   //examine if timeout and do something appropriate }