Как создать параллельный метод метода IEnumerable

Следуя этой публикации , я хочу распараллелить этот метод :

    public IEnumerable GetAllLogs(IEnumerable computers)
    {
        foreach (var cpt in computers)
        {
            foreach (var log in cpt.GetLogs())
            {
                yield return log;
            }
        }
    }

Я хочу, чтобы метод "yield returns" регистрирует, когда один из методов GetLogs завершен. Если у меня есть 4 компьютера, которые возвращаются:

  • Компьютер 01: «a», «b», «c», «d», «e»
  • Компьютер 02: «1», «2», «3» , «4», «5»
  • Компьютер 03: «альфа», «бета», «гамма», «дельта», «эпсилон»
  • Компьютер 04: «I», «II», «III» , «IV», «V»

При использовании «последовательного метода» вывод будет следующим:

a
b
c
d
e
1
2
3
4
5
alpha
beta
gamma
delta
epsilon
I
II
III
IV
V

И метод выполняется за 20 секунд. в методе GetLogs есть Thread.Sleep (1000) .

Я хочу, чтобы результат выглядел так:

III
a
4
gamma
b
c
IV
5
d
II
beta
e
1
2
delta
alpha
3
epsilon
I

и запускался через несколько секунд.

Я хочу, чтобы методы возвращали IEnumerable

9
задан Community 23 May 2017 в 12:25
поделиться