У меня есть многопоточное приложение, которое порождает потоки для нескольких аппаратных инструментов.Каждый поток в основном представляет собой бесконечный цикл (на весь срок службы приложения), который опрашивает оборудование на наличие новых данных и активирует событие (которое передает данные) каждый раз, когда он собирает что-то новое.Существует один класс слушателей, который объединяет все эти инструменты, выполняет некоторые вычисления и запускает новое событие с этими вычислениями.
Однако мне интересно, будет ли лучше, поскольку имеется один слушатель, было бы лучшевыставить метод IEnumerable<>
на этих инструментах и использовать yield return
для возврата данных вместо событий срабатывания.
Я хотел бы узнать, знает ли кто-нибудь о различиях в этих двух методах.В частности, я ищу лучшую надежность, лучшую способность приостанавливать / отменять операции, лучше всего использовать в целях многопоточности, общей безопасности и т. Д.
Кроме того, со вторым способом все еще можно запустить IEnumerable
петля в отдельном потоке?Многие из этих инструментов в некоторой степени связаны с процессором, поэтому крайне важно, чтобы каждый из них работал в отдельном потоке.