System.Collections.Concurrent имеет несколько новых коллекций, которые очень хорошо работают в многопоточных средах.Тем не менее, они немного ограничены.Либо они блокируются, пока элемент не становится доступным, либо возвращают default(T)
(методы TryXXX).
Мне нужна коллекция, которая является поточно-ориентированной, но вместо блокировки вызывающей нити она использует обратный вызов, чтобы сообщить мне, что хотя бы один элемент доступен.
Мое текущее решение - использовать BlockingCollection, но использовать APM с делегатом для получения следующего элемента.Другими словами, я создаю делегата для метода, который Take
s из коллекции, и выполняю этот делегат, используя BeginInvoke
.
К сожалению, мне нужно сохранить много состояния в своем классе, чтобычтобы сделать это.Хуже того, класс не является потокобезопасным;он может использоваться только одним потоком.Я отклоняюсь от края удобства обслуживания, которое я предпочел бы не делать.
Я знаю, что есть некоторые библиотеки, которые делают то, что я здесь делаю, довольно простым (я считаю, что Reactive Framework - это одна изиз них), но я хотел бы достичь своих целей без добавления каких-либо ссылок за пределами версии 4. фреймворка.
Существуют ли какие-либо более совершенные шаблоны, которые я могу использовать, которые не требуют внешних ссылок, которые выполняют мою цель?
tl; др:
Существуют ли какие-либо шаблоны, которые удовлетворяют требованию:
"Мне нужно сообщить о коллекции, к которой я готовследующий элемент, и чтобы коллекция выполнила обратный вызов, когда этот следующий элемент прибыл, без блокирования каких-либо потоков. "