Если вы хотите получить «наблюдаемую коллекцию», то есть коллекцию, которая направляет результаты вам, а не позволяет потребителю получать их - тогда вы, вероятно, захотите взглянуть на расширения Reactive Framework. Вот статья об этом:
http://www.infoq.com/news/2009/07/Reactive-Framework-LINQ-Events
Теперь, как вы заметили, вы можете легко создавать итераторы в стиле «push» и «pull», если у вас есть сопрограммы. (Или, как указывает Томас, вы также можете создавать их с продолжениями.) В текущей версии C # у нас нет настоящих сопрограмм (или продолжений). Тем не менее, мы очень обеспокоены болью, которую пользователи испытывают при асинхронном программировании .
Реализация сопрограмм на основе волокон в качестве первоклассной языковой функции - это один из методов, который может быть использован для облегчения асинхронного программирования, но это лишь одна из возможных идей многих, которые мы сейчас исследуем. Если у вас действительно хороший сценарий, когда сопрограммы работают лучше, чем что-либо еще, включая реактивную структуру, тогда я бы хотел услышать больше об этом. Чем больше у нас реальных данных о реальных проблемах, с которыми сталкиваются люди при асинхронном программировании, тем больше у нас шансов найти хорошее решение. Спасибо!
ОБНОВЛЕНИЕ: Недавно мы объявили, что добавляем сопрограммированные асинхронные потоки управления в следующую версию C # и VB. Вы можете попробовать сами с нашей предварительной версией Community Technology Preview, которую вы можете скачать здесь .