Как мне обрабатывать побочные потоки в Rx.Net?

Я строю симуляцию с использованием Rx.Net. Пользовательский ввод моделируется как поток преобразования состояния в исходное состояние. С помощью Scan Я могу разрешить эти преобразования в текущем состоянии.

Проблема в том, что преобразования могут иметь побочные эффекты. Они моделируются как объекты событий, которые реализуют ISimulationEvent,

Я попробовал несколько подходов:

  • Сохранять побочные эффекты в текущем состоянии объекта и очищать их при каждом преобразовании
  • Вернуть Tuple игровых состояний и IList<ISimulationEvent> в Scan
  • Передайте обратный вызов побочного эффекта, чтобы объединить их

Каждое решение кажется "хакерским".

Есть ли чистый способ реализовать это с помощью Rx.Net?


Это пример того, как мои команды складываются в состояния:

var commands = mouseStates
    .DistinctUntilChanged(mouseState => mouseState.LeftButton)
    .Where(mouseState => mouseState.LeftButton == ButtonState.Pressed)
    .Select(mouseState => new CreateWidgetCommand(new Vector2(mouseState.X, mouseState.Y)));

var initialState = new SimulationState();

var states = commands.Scan(
    initialState, 
    (state, command) => command.CanApply(state) ? command.Apply(state) : state);

каждый Apply должен вывести поток ISimulationEvent как побочный эффект. Тем не менее, мне также нужно сохранить результат SimulationState,

0 ответов

Другие вопросы по тегам