У меня проблема, когда BlockingCollection<MyItem>
слишком долго просыпается от .Take()
звонка.
Сценарий таков: у меня есть поток, который очень быстро отправляет данные в BlockingCollection
(на самом деле в XUnit я выполнил цикл for
. У меня есть 3 Task
, которые просто сидят в .Take()
вызове и ждут добавления элементов. Из вывода я могу видеть что почти 200 элементов (до 1 секунды или более) были добавлены в коллекцию перед первым Task
пробуждением и фактическим сбором данных из BlockingCollection
.
У меня есть несколько "буферов" на основе BlockingCollection
, организованных конвейерным способом, и все они страдают от слишком длительного пробуждения при выполнении .Take()
действия.
Я пробовал .TryTake()
и .GetConsumingEnumerable()
с теми же результатами.
Идея о том, что в конце этого конвейера у меня есть однопоточная медленная функция, которая обрабатывает элементы один за другим, и для обработки одного элемента может потребоваться неизвестное время. Мне просто нужно убедиться, что "элемент" перешел из "буфера" в "буфер" очень быстро (как только он будет вставлен в первый "буфер")
Мне просто нужно убедиться, что время запуска (в .Take()
или .TryTake()
и т. Д.) Будет близко к тому времени, когда элемент добавлен в коллекцию
.Take()
реализации? Я не сказал, что приложение вылетает или что-то в этом роде, и я не сказал, что этоnot working
'- оно действительно работает, и все прошло, обработано и т.д ... ок. Я прошу шаблон проектирования для быстрого производителя - медленного потребителя - person Jasper   schedule 25.05.2015vs.executionengine.x86
(приложение для запуска тестов xunit), так что я думаю, что почти все они мои, и я думаю, мне нужна добрая половина из них вживую. Не знаю, как ответить .... - person Jasper   schedule 25.05.2015start-up
временем? - person VMAtm   schedule 25.05.2015BlockingCollection
требуется слишком много времени, чтобы проснуться и действительно понять, что у него есть элементы в коллекции и на самом деле.Take()
они. Я собираю до 200 предметов в коллекцию непосредственно перед самой первой.Take()
разблокировкой и сбором - person Jasper   schedule 26.05.2015IObservable<>
иIObserver<>
, потому что это именно тот поток данных, который мне нужен, но я все еще пытаюсь понять Rx, и на самом деле здесь я столкнулся с проблемой создания потоков ... Может быть, у вас есть ссылка на проект GitHub что с использованием Rx, чтобы я мог узнать об этом немного больше? - person Jasper   schedule 27.05.2015