После экспериментов с IObservables я решил проверить их на обработку входящих сообщений по шине сообщений. По сути, я получаю IObservable<Request>
, а Request
содержит необходимые функции для ответа на ответ.
В какой-то момент во время обработки я должен десериализовать данные и преобразовать их из объекта Request в объект Command, который содержит то, что ему действительно нужно сделать. Команда не связана с запросом.
После десериализации я преобразую его в правильный ответ, однако для отправки ответа мне нужен оригинальный объект Request. Я хочу попытаться достичь этого, сохраняя высокую читабельность кода. До сих пор я использовал методы расширения и лямбда-выражения, чтобы получить следующее (где requests
- это IObservable<Request>
):
requestProcessor = requests
.Deserialize<IdentityRequest>()
.Where(idRequest => idRequest.Address != null)
.Select(idRequest => new IdentityResponse() {Identity = identityTable[idRequest.Address.Address]})
.Serialize()
.Zip(requests, (response, request) => new {request = request, response = response})
.Subscribe(data => data.request.Respond(data.response, ObjectTypes.IdentityResponse));
Мой вопрос заключается в том, что, поскольку все команды до функции Zip
требуют времени для обработки, Zip
будет работать с одним и тем же объектом ввода (т. Е. С исходным вводом, а также с отдельным обработанным вводом), если есть постоянный поток сообщений. Как я могу это проверить?
Есть ли лучший способ сделать это?