根据条件并行调用方法
Invoke methods in parallel based on condition
public IList<Student> GetStudentList()
{
var students = new List<Student>();
if(getOtherSchoolStudents)
{
var otherSchoolStudents = GetOtherSchoolStudents();
students.AddRange(otherSchoolStudents);
}
var currentSchoolStudents = GetCurrentSchoolStudents();
students.AddRange(currentSchoolStudents)
return students;
}
此处,当 getOtherSchoolStudents
为 true
时,我想 运行 方法 GetOtherSchoolStudents()
和 GetCurrentSchoolStudents()
并行。我知道我可以将 GetCurrentSchoolStudents()
内部移动到条件范围内,并且 运行 都并行移动,如下所示
public IList<Student> GetStudentList()
{
var students = new List<Student>();
if(getOtherSchoolStudents)
{
var otherSchoolStudents = GetOtherSchoolStudents(); // run in parallel
var currentSchoolStudents = GetCurrentSchoolStudents(); // run in parallel
students.AddRange(otherSchoolStudents);
students.AddRange(currentSchoolStudents)
}
else
{
var currentSchoolStudents = GetCurrentSchoolStudents();
students.AddRange(currentSchoolStudents);
}
return students;
}
还有其他方法吗?
最简单的方法可能是并行调用两个获取操作:
public IList<Student> GetStudentList()
{
List<Student> currentSchoolStudents;
List<Student> otherSchoolStudents;
Parallel.Invoke(
{ currentSchoolStudents = GetCurrentSchoolStudents(); }
{ otherSchoolStudents = getOtherSchoolStudents
? GetOtherSchoolStudents()
: new List<Student>(); }
);
var students = new List<Student>();
students.AddRange(otherSchoolStudents);
students.AddRange(currentSchoolStudents)
return students;
}
假设您的操作 return 是 List<Student>
,如果它们 return 是其他东西,例如 Student[]
,您需要相应地更改类型。
public IList<Student> GetStudentList()
{
var students = new List<Student>();
if(getOtherSchoolStudents)
{
var otherSchoolStudents = GetOtherSchoolStudents();
students.AddRange(otherSchoolStudents);
}
var currentSchoolStudents = GetCurrentSchoolStudents();
students.AddRange(currentSchoolStudents)
return students;
}
此处,当 getOtherSchoolStudents
为 true
时,我想 运行 方法 GetOtherSchoolStudents()
和 GetCurrentSchoolStudents()
并行。我知道我可以将 GetCurrentSchoolStudents()
内部移动到条件范围内,并且 运行 都并行移动,如下所示
public IList<Student> GetStudentList()
{
var students = new List<Student>();
if(getOtherSchoolStudents)
{
var otherSchoolStudents = GetOtherSchoolStudents(); // run in parallel
var currentSchoolStudents = GetCurrentSchoolStudents(); // run in parallel
students.AddRange(otherSchoolStudents);
students.AddRange(currentSchoolStudents)
}
else
{
var currentSchoolStudents = GetCurrentSchoolStudents();
students.AddRange(currentSchoolStudents);
}
return students;
}
还有其他方法吗?
最简单的方法可能是并行调用两个获取操作:
public IList<Student> GetStudentList()
{
List<Student> currentSchoolStudents;
List<Student> otherSchoolStudents;
Parallel.Invoke(
{ currentSchoolStudents = GetCurrentSchoolStudents(); }
{ otherSchoolStudents = getOtherSchoolStudents
? GetOtherSchoolStudents()
: new List<Student>(); }
);
var students = new List<Student>();
students.AddRange(otherSchoolStudents);
students.AddRange(currentSchoolStudents)
return students;
}
假设您的操作 return 是 List<Student>
,如果它们 return 是其他东西,例如 Student[]
,您需要相应地更改类型。