У меня есть конвейерная установка, все с использованием реактивных расширений, начиная с потока значений (может прибыть в любое время, когда они захотят), а затем, подписавшись на него, есть много разных «модулей», выводящих поток вычисляемых значений, и этот потоктакже подписан другим уровнем модулей, которые также вычисляют другие значения.
Теперь в конце всего этого есть один класс, который прослушивает значения всех этих модулей и выводит сам какой-то другой вид значения.
Теперь в обычной жизни первоначальный поток значений поступает всякий раз, один за другим.
Но я также хочу иметь возможность «воспроизвести» эти значения и получить все выходные данные, но на этот раз »как можно быстрее ".
Но мне все еще нужны эти значения, чтобы иметь смысл, т. е. чтобы конечный результат мог быть" восстановлен "до исходного значения, которое его сгенерировало.
Не уверен, еслиВ этом есть смысл.
Есть несколько вещей, которые я рассматриваю, но ни одна из которых не кажется действительно чистой.
Нужно иметь "acОтмеченное время ".Т.е. есть какая-то временная деформация и все переигрывание, скажем, со скоростью 100x или чем-то еще.Однако у этого есть некоторые существенные недостатки, так как при скорости 100x время обработки значения становится гораздо более значительным.
Другой вопрос, который меня интересует (и приводит к моему вопросу), - это возможность«пошагово» все это, т. е. чтобы иметь возможность узнать, когда OnNext полностью обработан всеми его подписчиками, чтобы я мог просто отправить одно значение, подождать, пока все его обработают, получить соответствующее выходное значение,а затем отправьте следующий.
Преимущество будет в том, что его можно будет воспроизвести "настолько быстро, насколько позволяет мой компьютер".
Мне было интересно, что-то не хватало,где-нибудь, или способ сделать то, что я упустил из виду, которое может легко сделать то, что я хочу.
В случае неудачи единственная идея, которую я мог придумать, состояла в том, чтобы иметь прокси / фасады для всех моих классов, чтобы перехватыватькаждые входящие и исходящие значения и уведомить об этом, чтобы мой «проигрыватель» смог отследить все это.
У меня естьВозможно, я сформулировал мой вопрос в плохой форме.Позвольте мне перефразировать.
Моя проблема не столько в «воспроизведении» значений, я могу сделать это просто отлично, даже если просто загрузить их с диска и поместить их в IEnumerable, тогда они будут поданыкак можно быстрее.
Моя проблема в том, что, поскольку все конвейеры являются многопоточными по своей природе, если я отправлю их просто так, как можно быстрее, у меня не будет возможности отследить, какое входное значениесгенерировал, какое выходное значение (в отличие от вашего примера, они, вероятно, будут связаны друг с другом).
Я думал о TimeStamped, но это бесполезно для меня по нескольким причинам:
Разрешение TimeStamped в значительной степени соответствует разрешению DateTime.Now, то есть 10 мс, что недостаточно точно, и
снова, при подходе, основанном на времени, если мой конвейердля обработки, скажем, 5 мсек, затем внезапно эти 5 мсек приобретают слишком много значения (например, через 5 мсек многие входные значения уже могли бы войти, что делает его невозможным).Не знаю, какой из них сгенерировал, какое выходное значение).
Я знаю, что все это звучит очень "расплывчато", и определенно не хватает небольшого образца, но я не могу поместить весь свой код втам, поскольку он слишком длинный и сложный, в какой-то момент я попытаюсь привести в действие небольшой пример.
Все это для "имитационной" среды, где я могу воспроизвести вчерашние значения и проследить, что произошло, икогда, но я мог бы воспроизвести их быстрее.
Большое спасибо за ваш ответ, хотя.