Да, вы все равно получите выгоду от моего AsyncEnumerator.Новые потоки, представленные в .NET 4 (Tasks, Parallel, PLINQ и т. Д.), Посвящены параллелизму.То есть все они предназначены для того, чтобы взять вычислительную рабочую нагрузку, разделить ее и порождать на несколько потоков, чтобы рабочая нагрузка могла завершиться за меньшее время, чем для выполнения всей рабочей нагрузки 1 поток.Вы можете использовать эти конструкции для одновременного выполнения нескольких операций синхронного ввода-вывода.Однако синхронные операции ввода-вывода приводят к блокировке всех потоков, что затем заставляет пул потоков создавать больше потоков.Таким образом, использование ресурсов вашего приложения стремительно растет, а загрузка ЦП остается очень низкой.Это очень неэффективно для реализации вашего приложения и предотвращает его масштабирование.
Мой AsyncEnumerator полностью инициирует асинхронные операции ввода-вывода, не блокируя какие-либо потоки, так что использование ресурсов вашего приложения остается очень низким, поэтому ваше приложение масштабируетсяотлично.Загрузка ЦП в этом случае также остается низкой, поскольку вы выполняете ввод-вывод;не вычислительная рабочая нагрузка.
В следующей версии .NET новые функции языка async / await (над которыми я работал с Microsoft) позволяют выполнять асинхронный ввод-вывод и, фактически, новые функциисмоделированы очень похоже на мой AsyncEnumerator.Настолько, что вы можете портировать код, который использует мой AsyncEnumerator, на новую модель с очень небольшим количеством изменений исходного кода.
Как кто-то еще отметил, мой AsyncEnumerator по-прежнему предлагает другие функции и работает с .NET 2.0 и более поздними версиями.Так что многие еще долго будут находить его весьма полезным.