根据条件并行调用方法

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;
}

此处,当 getOtherSchoolStudentstrue 时,我想 运行 方法 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[],您需要相应地更改类型。