如果 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 }
我下面有一些愚蠢的代码; 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 }