Вызывать методы параллельно на основе условия - PullRequest
0 голосов
/ 19 сентября 2018
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;
}

Есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 19 сентября 2018

Самым простым способом может быть одновременный вызов двух ваших операций get:

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

Предполагается, что ваши операции возвращают List<Student>, если они возвращают что-то еще, например Student[],вам нужно соответственно изменить типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...